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

Remove all hand-written serializers (#100)

* Support Deserializing Boxes and HashMaps

* Extract SerializerBuilder to its own file & add some more comments

* Rename to CustomSerializerGenerator

* CR updates

* Add comment for container interface

* Update the comments with example generated code
parent c819930d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * SPDX-License-Identifier: Apache-2.0.
 */

package software.amazon.smithy.rust.codegen.lang
package software.amazon.smithy.rust.codegen.rustlang

import software.amazon.smithy.codegen.core.SymbolDependency
import software.amazon.smithy.codegen.core.SymbolDependencyContainer
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * SPDX-License-Identifier: Apache-2.0.
 */

package software.amazon.smithy.rust.codegen.lang
package software.amazon.smithy.rust.codegen.rustlang

data class RustModule(val name: String, val rustMetadata: RustMetadata) {
    fun render(writer: RustWriter) {
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * SPDX-License-Identifier: Apache-2.0.
 */

package software.amazon.smithy.rust.codegen.lang
package software.amazon.smithy.rust.codegen.rustlang

import software.amazon.smithy.codegen.core.ReservedWordSymbolProvider
import software.amazon.smithy.codegen.core.ReservedWords
+19 −12
Original line number Diff line number Diff line
@@ -3,19 +3,26 @@
 * SPDX-License-Identifier: Apache-2.0.
 */

package software.amazon.smithy.rust.codegen.lang
package software.amazon.smithy.rust.codegen.rustlang

import software.amazon.smithy.rust.codegen.smithy.RuntimeType

interface Container {
    val member: RustType
}

/**
 * A hierarchy of types handled by Smithy codegen
 */
sealed class RustType {

    // TODO: when Kotlin supports, sealed interfaces, seal Container
    /**
     * A Rust type that contains [member], another RustType. Used to generically operate over
     * shapes that contain other shapes, eg. [stripOuter] and [contains].
     */
    interface Container {
        val member: RustType
        val namespace: kotlin.String?
        val name: kotlin.String
    }

    /*
     * Name refers to the top-level type for import purposes
     */
@@ -40,11 +47,6 @@ sealed class RustType {
        override val name: kotlin.String = "i$precision"
    }

    data class Vec(override val member: RustType) : RustType(), Container {
        override val name: kotlin.String = "Vec"
        override val namespace = "::std::vec"
    }

    data class Slice(override val member: RustType) : RustType(), Container {
        override val name: kotlin.String = ""
    }
@@ -80,6 +82,11 @@ sealed class RustType {
        override val namespace: kotlin.String? = null
    }

    data class Vec(override val member: RustType) : RustType(), Container {
        override val name: kotlin.String = "Vec"
        override val namespace = "::std::vec"
    }

    data class Opaque(override val name: kotlin.String, override val namespace: kotlin.String? = null) : RustType()

    companion object {
@@ -121,12 +128,12 @@ fun <T : RustType> RustType.contains(t: T): Boolean {
    }

    return when (this) {
        is Container -> this.member.contains(t)
        is RustType.Container -> this.member.contains(t)
        else -> false
    }
}

inline fun <reified T : Container> RustType.stripOuter(): RustType {
inline fun <reified T : RustType.Container> RustType.stripOuter(): RustType {
    return when (this) {
        is T -> this.member
        else -> this
+2 −2
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * SPDX-License-Identifier: Apache-2.0.
 */

package software.amazon.smithy.rust.codegen.lang
package software.amazon.smithy.rust.codegen.rustlang

import org.intellij.lang.annotations.Language
import software.amazon.smithy.codegen.core.CodegenException
@@ -159,7 +159,7 @@ typealias Writable = RustWriter.() -> Unit
/** Helper to allow coercing the Writeable signature
 *  writable { rust("fn foo() { }")
 */
fun writeable(w: Writable): Writable = w
fun writable(w: Writable): Writable = w

class RustWriter private constructor(
    private val filename: String,
Loading