Skip to content

Commit 55d55cf

Browse files
committed
Support external trait providers
1 parent bbd4d31 commit 55d55cf

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

sbtPlugin/src/main/scala/org/polyvariant/smithytraitcodegen/SmithyTraitCodegen.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

sbtPlugin/src/main/scala/org/polyvariant/smithytraitcodegen/SmithyTraitCodegenPlugin.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,18 @@ object SmithyTraitCodegenPlugin extends AutoPlugin {
4747
"The directory where the generated Java sources and resources will be placed"
4848
)
4949

50+
val smithyTraitCodegenExternalProviders = settingKey[List[String]](
51+
"External trait provideres"
52+
)
53+
5054
}
5155

5256
import autoImport.*
5357

5458
override def projectSettings: Seq[Setting[?]] = Seq(
5559
smithyTraitCodegenSourceDirectory := (Compile / resourceDirectory).value / "META-INF" / "smithy",
5660
smithyTraitCodegenTargetDirectory := (Compile / target).value,
61+
smithyTraitCodegenExternalProviders := Nil,
5762
Keys.generateSmithyTraits := Def.task {
5863
import sbt.util.CacheImplicits.*
5964
val s = (Compile / streams).value
@@ -77,6 +82,7 @@ object SmithyTraitCodegenPlugin extends AutoPlugin {
7782
targetDir = os.Path(smithyTraitCodegenTargetDirectory.value),
7883
smithySourcesDir = PathRef(smithyTraitCodegenSourceDirectory.value),
7984
dependencies = jars.map(PathRef(_)).toList,
85+
externalProviders = smithyTraitCodegenExternalProviders.value,
8086
)
8187
val cachedCodegen =
8288
Tracked.inputChanged[SmithyTraitCodegen.Args, SmithyTraitCodegen.Output](

0 commit comments

Comments
 (0)