@@ -38,12 +38,13 @@ object SmithyTraitCodegen {
3838 targetDir : os.Path ,
3939 smithySourcesDir : PathRef ,
4040 dependencies : List [PathRef ],
41+ externalProviders : List [String ],
4142 )
4243
4344 object Args {
4445
4546 // format: off
46- private type ArgsDeconstructed = String :*: String :*: os.Path :*: PathRef :*: List [PathRef ] :*: LNil
47+ private type ArgsDeconstructed = String :*: String :*: os.Path :*: PathRef :*: List [PathRef ] :*: List [ String ] :*: LNil
4748 // format: on
4849
4950 private implicit val pathFormat : JsonFormat [os.Path ] = BasicJsonProtocol
@@ -56,6 +57,7 @@ object SmithyTraitCodegen {
5657 (" targetDir" , args.targetDir) :*:
5758 (" smithySourcesDir" , args.smithySourcesDir) :*:
5859 (" dependencies" , args.dependencies) :*:
60+ (" externalProviders" , args.externalProviders) :*:
5961 LNil
6062 },
6163 {
@@ -64,13 +66,15 @@ object SmithyTraitCodegen {
6466 (_, targetDir) :*:
6567 (_, smithySourcesDir) :*:
6668 (_, dependencies) :*:
69+ (_, externalProviders) :*:
6770 LNil =>
6871 Args (
6972 javaPackage = javaPackage,
7073 smithyNamespace = smithyNamespace,
7174 targetDir = targetDir,
7275 smithySourcesDir = smithySourcesDir,
7376 dependencies = dependencies,
77+ externalProviders = externalProviders,
7478 )
7579 },
7680 )
@@ -141,6 +145,15 @@ object SmithyTraitCodegen {
141145 if (os.exists(genDir / " META-INF" ))
142146 os.move(genDir / " META-INF" , metaDir / " META-INF" )
143147
148+ os
149+ .walk(metaDir, includeTarget = true )
150+ .filter(os.isFile)
151+ .foreach { p =>
152+ if (p.toIO.name == " software.amazon.smithy.model.traits.TraitService" ) {
153+ args.externalProviders.foreach(provider => os.write.append(p, provider))
154+ }
155+ }
156+
144157 Output (metaDir = metaDir.toIO, javaDir = genDir.toIO)
145158 }
146159
0 commit comments