// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`language bindings 1`] = `
"import abc
import builtins
import datetime
import enum
import typing

import jsii
import publication
import typing_extensions

from typeguard import check_type

from ._jsii import *


@jsii.data_type(
    jsii_type=\\"1bc04b5291c26a46d918139138b992d2de976d6851d0893b0476b85bfbdfc6e6.Name\\",
    jsii_struct_bases=[],
    name_mapping={\\"first\\": \\"first\\", \\"last\\": \\"last\\", \\"middle\\": \\"middle\\"},
)
class Name:
    def __init__(
        self,
        *,
        first: builtins.str,
        last: builtins.str,
        middle: typing.Optional[builtins.str] = None,
    ) -> None:
        '''
        :param first: 
        :param last: 
        :param middle: 

        :schema: Name
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a733313bf214654e62b2f9f69d233474d4c6277e0f71f4fd3acee58a8fc3c20d)
            check_type(argname=\\"argument first\\", value=first, expected_type=type_hints[\\"first\\"])
            check_type(argname=\\"argument last\\", value=last, expected_type=type_hints[\\"last\\"])
            check_type(argname=\\"argument middle\\", value=middle, expected_type=type_hints[\\"middle\\"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            \\"first\\": first,
            \\"last\\": last,
        }
        if middle is not None:
            self._values[\\"middle\\"] = middle

    @builtins.property
    def first(self) -> builtins.str:
        '''
        :schema: Name#first
        '''
        result = self._values.get(\\"first\\")
        assert result is not None, \\"Required property 'first' is missing\\"
        return typing.cast(builtins.str, result)

    @builtins.property
    def last(self) -> builtins.str:
        '''
        :schema: Name#last
        '''
        result = self._values.get(\\"last\\")
        assert result is not None, \\"Required property 'last' is missing\\"
        return typing.cast(builtins.str, result)

    @builtins.property
    def middle(self) -> typing.Optional[builtins.str]:
        '''
        :schema: Name#middle
        '''
        result = self._values.get(\\"middle\\")
        return typing.cast(typing.Optional[builtins.str], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return \\"Name(%s)\\" % \\", \\".join(
            k + \\"=\\" + repr(v) for k, v in self._values.items()
        )


__all__ = [
    \\"Name\\",
]

publication.publish()

def _typecheckingstub__a733313bf214654e62b2f9f69d233474d4c6277e0f71f4fd3acee58a8fc3c20d(
    *,
    first: builtins.str,
    last: builtins.str,
    middle: typing.Optional[builtins.str] = None,
) -> None:
    \\"\\"\\"Type checking stubs\\"\\"\\"
    pass
"
`;

exports[`language bindings 2`] = `
"package org.myorg;

/**
 */
@software.amazon.jsii.Jsii(module = org.myorg.$Module.class, fqn = \\"1bc04b5291c26a46d918139138b992d2de976d6851d0893b0476b85bfbdfc6e6.Name\\")
@software.amazon.jsii.Jsii.Proxy(Name.Jsii$Proxy.class)
public interface Name extends software.amazon.jsii.JsiiSerializable {

    /**
     */
    @org.jetbrains.annotations.NotNull java.lang.String getFirst();

    /**
     */
    @org.jetbrains.annotations.NotNull java.lang.String getLast();

    /**
     */
    default @org.jetbrains.annotations.Nullable java.lang.String getMiddle() {
        return null;
    }

    /**
     * @return a {@link Builder} of {@link Name}
     */
    static Builder builder() {
        return new Builder();
    }
    /**
     * A builder for {@link Name}
     */
    public static final class Builder implements software.amazon.jsii.Builder<Name> {
        java.lang.String first;
        java.lang.String last;
        java.lang.String middle;

        /**
         * Sets the value of {@link Name#getFirst}
         * @param first the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder first(java.lang.String first) {
            this.first = first;
            return this;
        }

        /**
         * Sets the value of {@link Name#getLast}
         * @param last the value to be set. This parameter is required.
         * @return {@code this}
         */
        public Builder last(java.lang.String last) {
            this.last = last;
            return this;
        }

        /**
         * Sets the value of {@link Name#getMiddle}
         * @param middle the value to be set.
         * @return {@code this}
         */
        public Builder middle(java.lang.String middle) {
            this.middle = middle;
            return this;
        }

        /**
         * Builds the configured instance.
         * @return a new instance of {@link Name}
         * @throws NullPointerException if any required attribute was not provided
         */
        @Override
        public Name build() {
            return new Jsii$Proxy(this);
        }
    }

    /**
     * An implementation for {@link Name}
     */
    @software.amazon.jsii.Internal
    final class Jsii$Proxy extends software.amazon.jsii.JsiiObject implements Name {
        private final java.lang.String first;
        private final java.lang.String last;
        private final java.lang.String middle;

        /**
         * Constructor that initializes the object based on values retrieved from the JsiiObject.
         * @param objRef Reference to the JSII managed object.
         */
        protected Jsii$Proxy(final software.amazon.jsii.JsiiObjectRef objRef) {
            super(objRef);
            this.first = software.amazon.jsii.Kernel.get(this, \\"first\\", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.last = software.amazon.jsii.Kernel.get(this, \\"last\\", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
            this.middle = software.amazon.jsii.Kernel.get(this, \\"middle\\", software.amazon.jsii.NativeType.forClass(java.lang.String.class));
        }

        /**
         * Constructor that initializes the object based on literal property values passed by the {@link Builder}.
         */
        protected Jsii$Proxy(final Builder builder) {
            super(software.amazon.jsii.JsiiObject.InitializationMode.JSII);
            this.first = java.util.Objects.requireNonNull(builder.first, \\"first is required\\");
            this.last = java.util.Objects.requireNonNull(builder.last, \\"last is required\\");
            this.middle = builder.middle;
        }

        @Override
        public final java.lang.String getFirst() {
            return this.first;
        }

        @Override
        public final java.lang.String getLast() {
            return this.last;
        }

        @Override
        public final java.lang.String getMiddle() {
            return this.middle;
        }

        @Override
        @software.amazon.jsii.Internal
        public com.fasterxml.jackson.databind.JsonNode $jsii$toJson() {
            final com.fasterxml.jackson.databind.ObjectMapper om = software.amazon.jsii.JsiiObjectMapper.INSTANCE;
            final com.fasterxml.jackson.databind.node.ObjectNode data = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();

            data.set(\\"first\\", om.valueToTree(this.getFirst()));
            data.set(\\"last\\", om.valueToTree(this.getLast()));
            if (this.getMiddle() != null) {
                data.set(\\"middle\\", om.valueToTree(this.getMiddle()));
            }

            final com.fasterxml.jackson.databind.node.ObjectNode struct = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            struct.set(\\"fqn\\", om.valueToTree(\\"1bc04b5291c26a46d918139138b992d2de976d6851d0893b0476b85bfbdfc6e6.Name\\"));
            struct.set(\\"data\\", data);

            final com.fasterxml.jackson.databind.node.ObjectNode obj = com.fasterxml.jackson.databind.node.JsonNodeFactory.instance.objectNode();
            obj.set(\\"$jsii.struct\\", struct);

            return obj;
        }

        @Override
        public final boolean equals(final Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Name.Jsii$Proxy that = (Name.Jsii$Proxy) o;

            if (!first.equals(that.first)) return false;
            if (!last.equals(that.last)) return false;
            return this.middle != null ? this.middle.equals(that.middle) : that.middle == null;
        }

        @Override
        public final int hashCode() {
            int result = this.first.hashCode();
            result = 31 * result + (this.last.hashCode());
            result = 31 * result + (this.middle != null ? this.middle.hashCode() : 0);
            return result;
        }
    }
}
"
`;