disneystreaming / smithy4s

https://disneystreaming.github.io/smithy4s/
Other
339 stars 68 forks source link

Rendering: unsupported traits with sub-components targeting `smithy.api#Unit` #1297

Closed kubukoz closed 7 months ago

kubukoz commented 8 months ago

Version: 0.18.3

$version: "2"

namespace input

@trait
union myTrait {
    u: Unit
}

@myTrait(u: {

})
string Example

This fails with:

Stack trace

``` scala.NotImplementedError: Unsupported case: (software.amazon.smithy.model.node.ObjectNode@d6514560,Unit) at smithy4s.codegen.internals.SmithyToIR.unfoldNodeAndTypeP(SmithyToIR.scala:1375) at smithy4s.codegen.internals.SmithyToIR.unfoldNodeAndType(SmithyToIR.scala:1286) at smithy4s.codegen.internals.SmithyToIR.$anonfun$unfoldTrait$1(SmithyToIR.scala:1177) at smithy4s.codegen.internals.recursion$.hylo(recursion.scala:41) at smithy4s.codegen.internals.recursion$.$anonfun$hylo$1(recursion.scala:41) at smithy4s.codegen.internals.TypedNode$AltValueTN$$anon$2.traverse(IR.scala:377) at smithy4s.codegen.internals.TypedNode$AltValueTN$$anon$2.traverse(IR.scala:371) at cats.Traverse$Ops.traverse(Traverse.scala:241) at cats.Traverse$Ops.traverse$(Traverse.scala:240) at cats.Traverse$ToTraverseOps$$anon$3.traverse(Traverse.scala:278) at smithy4s.codegen.internals.TypedNode$$anon$3.traverse(IR.scala:401) at smithy4s.codegen.internals.TypedNode$$anon$3.traverse(IR.scala:390) at cats.Traverse.map(Traverse.scala:134) at cats.Traverse.map$(Traverse.scala:133) at smithy4s.codegen.internals.TypedNode$$anon$3.map(IR.scala:390) at cats.Functor$Ops.map(Functor.scala:252) at cats.Functor$Ops.map$(Functor.scala:252) at cats.Functor$ToFunctorOps$$anon$5.map(Functor.scala:269) at smithy4s.codegen.internals.recursion$.hylo(recursion.scala:41) at smithy4s.codegen.internals.recursion$.ana(recursion.scala:63) at smithy4s.codegen.internals.SmithyToIR.smithy4s$codegen$internals$SmithyToIR$$unfoldTrait(SmithyToIR.scala:1177) at smithy4s.codegen.internals.SmithyToIR.$anonfun$hints$5(SmithyToIR.scala:968) at scala.collection.immutable.List.map(List.scala:246) at smithy4s.codegen.internals.SmithyToIR.smithy4s$codegen$internals$SmithyToIR$$hints(SmithyToIR.scala:968) at smithy4s.codegen.internals.SmithyToIR$ShapeExt.$anonfun$alts$1(SmithyToIR.scala:1041) at scala.collection.StrictOptimizedIterableOps.map(StrictOptimizedIterableOps.scala:100) at scala.collection.StrictOptimizedIterableOps.map$(StrictOptimizedIterableOps.scala:87) at scala.collection.convert.JavaCollectionWrappers$JCollectionWrapper.map(JavaCollectionWrappers.scala:98) at smithy4s.codegen.internals.SmithyToIR$ShapeExt.alts(SmithyToIR.scala:1032) at smithy4s.codegen.internals.SmithyToIR$$anon$1.unionShape(SmithyToIR.scala:269) at smithy4s.codegen.internals.SmithyToIR$$anon$1.unionShape(SmithyToIR.scala:111) at software.amazon.smithy.model.shapes.UnionShape.accept(UnionShape.java:47) at smithy4s.codegen.internals.SmithyToIR.$anonfun$allDecls$2(SmithyToIR.scala:105) at scala.collection.immutable.List.flatMap(List.scala:293) at smithy4s.codegen.internals.SmithyToIR.allDecls(SmithyToIR.scala:105) at smithy4s.codegen.internals.SmithyToIR$.apply(SmithyToIR.scala:52) at smithy4s.codegen.internals.CodegenImpl$.$anonfun$generate$14(CodegenImpl.scala:161) at scala.collection.immutable.List.map(List.scala:246) at smithy4s.codegen.internals.CodegenImpl$.generate(CodegenImpl.scala:161) at smithy4s.codegen.internals.CodegenImpl$.generate(CodegenImpl.scala:44) at smithy4s.codegen.Codegen$.generate(Codegen.scala:22) at smithy4s.codegen.Codegen$.generateToDisk(Codegen.scala:25) at smithy4s.codegen.cli.Main$.$anonfun$main$1(Main.scala:46) at smithy4s.codegen.cli.Main$.$anonfun$main$1$adapted(Main.scala:44) at scala.util.Either.map(Either.scala:382) at smithy4s.codegen.cli.Main$.main(Main.scala:44) at smithy4s.codegen.cli.Main.main(Main.scala) ```

So far I haven't found any other unsupported cases, it seems to be Unit in particular.

denisrosca commented 7 months ago

I'm going to take a stab at this.