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

Fix blob instantiation code for protocol tests (#24)

* Fix blob instantiation code for protocol tests

* Update Instantiator.kt

clarify comment
parent 04850638
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -54,10 +54,14 @@ class Instantiator(
                RuntimeType.Instant(runtimeConfig)
            )

            /**
             * ```rust
             * Blob::new(\"arg\")
             * ```
             */
            is BlobShape -> writer.write(
                "\$T::new(\$T(${(arg as StringNode).value.dq()}).unwrap())",
                RuntimeType.Blob(runtimeConfig),
                RuntimeType.Base64Decode(runtimeConfig)
                "\$T::new(${(arg as StringNode).value.dq()})",
                RuntimeType.Blob(runtimeConfig)
            )

            // Simple Shapes
+20 −1
Original line number Diff line number Diff line
@@ -2,11 +2,15 @@ package software.amazon.smithy.rust.codegen.smithy.generators

import org.junit.jupiter.api.Test
import software.amazon.smithy.model.node.Node
import software.amazon.smithy.model.node.StringNode
import software.amazon.smithy.model.shapes.BlobShape
import software.amazon.smithy.model.shapes.ShapeId
import software.amazon.smithy.model.shapes.StructureShape
import software.amazon.smithy.model.shapes.UnionShape
import software.amazon.smithy.rust.codegen.lang.RustWriter
import software.amazon.smithy.rust.codegen.lang.rustBlock
import software.amazon.smithy.rust.codegen.lang.withBlock
import software.amazon.smithy.rust.codegen.util.dq
import software.amazon.smithy.rust.codegen.util.lookup
import software.amazon.smithy.rust.testutil.TestRuntimeConfig
import software.amazon.smithy.rust.testutil.asSmithy
@@ -44,7 +48,6 @@ class InstantiatorTest {
            map: NestedMap
        }


        map NestedMap {
            key: String,
            value: Inner
@@ -174,4 +177,20 @@ class InstantiatorTest {
        }
        writer.shouldCompile(strict = true)
    }

    @Test
    fun `blob inputs are binary data`() {
        // "Parameter values that contain binary data MUST be defined using values
        // that can be represented in plain text (for example, use "foo" and not "Zm9vCg==")."
        val writer = RustWriter.forModule("lib")
        val sut = Instantiator(symbolProvider, model, runtimeConfig)
        writer.write("#[test]")
        writer.rustBlock("fn test_blob()") {
            withBlock("let blob = ", ";") {
                sut.render(StringNode.parse("foo".dq()), BlobShape.builder().id(ShapeId.from("com.example#Blob")).build(), this)
            }
            write("assert_eq!(std::str::from_utf8(blob.as_ref()).unwrap(), \"foo\");")
        }
        writer.shouldCompile()
    }
}
+8 −2
Original line number Diff line number Diff line
@@ -86,8 +86,14 @@ pub struct Blob {
}

impl Blob {
    pub fn new(inp: Vec<u8>) -> Self {
        Blob { inner: inp }
    pub fn new<T: Into<Vec<u8>>>(inp: T) -> Self {
        Blob { inner: inp.into() }
    }
}

impl AsRef<[u8]> for Blob {
    fn as_ref(&self) -> &[u8] {
        &self.inner
    }
}