Unverified Commit 72674757 authored by Russell Cohen's avatar Russell Cohen Committed by GitHub
Browse files

Misc bug fixes discovered during restXML (#353)

- Support recursive inline dependencies & iterate to a fixed point properly
- Fix unit test function naming
- Record orginal id in synthetic inputs & outputs
- Instantiate recursive unions properly
parent 4b16e27c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ class InlineDependency(
    val renderer: (RustWriter) -> Unit
) : RustDependency(name) {
    override fun version(): String {
        return renderer(RustWriter.forModule("_")).hashCode().toString()
        // just need a version that won't crash
        return renderer.hashCode().toString()
    }

    override fun dependencies(): List<RustDependency> {
+3 −1
Original line number Diff line number Diff line
@@ -45,15 +45,17 @@ open class RustCrate(
    }

    private fun injectInlineDependencies() {
        val writtenDependencies = mutableSetOf<String>()
        val unloadedDepdencies = {
            this
                .inner.dependencies
                .map { dep -> RustDependency.fromSymbolDependency(dep) }
                .filterIsInstance<InlineDependency>().distinctBy { it.key() }
                .filter { !modules.contains(it.module) }
                .filter { !writtenDependencies.contains(it.key()) }
        }
        while (unloadedDepdencies().isNotEmpty()) {
            unloadedDepdencies().forEach { dep ->
                writtenDependencies.add(dep.key())
                this.withModule(RustModule.default(dep.module, false)) {
                    dep.renderer(it)
                }
+1 −2
Original line number Diff line number Diff line
@@ -233,12 +233,11 @@ class Instantiator(
        val variant = data.members.iterator().next()
        val memberName = variant.key.value
        val member = shape.expectMember(memberName)
            .let { model.expectShape(it.target) }
        // TODO: refactor this detail into UnionGenerator
        writer.write("#T::${memberName.toPascalCase()}", unionSymbol)
        // unions should specify exactly one member
        writer.withBlock("(", ")") {
            render(this, member, variant.value, ctx)
            renderMember(this, member, variant.value, ctx)
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ class ResponseBindingGenerator(protocolConfig: ProtocolConfig, private val opera
        val target = model.expectShape(binding.member.target)
        check(target is MapShape)
        val fnName = "deser_prefix_header_${fnName(operationShape, binding)}"
        val inner = RuntimeType.forInlineFun("${fnName}_inner", "http_serde_inner") {
        val inner = RuntimeType.forInlineFun("${fnName}_inner", "http_serde") {
            it.rustBlock(
                "pub fn ${fnName}_inner(headers: #T::header::ValueIter<http::HeaderValue>) -> Result<Option<#T>, #T::ParseError>",
                RuntimeType.http,
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ import software.amazon.smithy.model.traits.AnnotationTrait
/**
 * Indicates that a shape is a synthetic input (see `OperationNormalizer.kt`)
 */
class SyntheticInputTrait constructor(val operation: ShapeId, val body: ShapeId?) :
class SyntheticInputTrait constructor(val operation: ShapeId, val originalId: ShapeId?, val body: ShapeId?) :
    AnnotationTrait(ID, ObjectNode.fromStringMap(mapOf("body" to body.toString()))) {
    companion object {
        val ID = ShapeId.from("smithy.api.internal#syntheticInput")
Loading