# -*- coding: utf-8 -*-
# Auto-generated by Stone, do not modify.
# @generated
# flake8: noqa
# pylint: skip-file
try:
    from . import stone_validators as bv
    from . import stone_base as bb
except (ImportError, SystemError, ValueError):
    # Catch errors raised when importing a relative module when not in a package.
    # This makes testing this file directly (outside of a package) easier.
    import stone_validators as bv
    import stone_base as bb

class EmptyContainer(bb.Struct):
    """
    This struct left intentionally empty
    """

    __slots__ = [
    ]

    _has_required_fields = False

    def __init__(self):
        pass

    def _process_custom_annotations(self, annotation_type, field_path, processor):
        super(EmptyContainer, self)._process_custom_annotations(annotation_type, field_path, processor)

    def __repr__(self):
        return 'EmptyContainer()'

EmptyContainer_validator = bv.Struct(EmptyContainer)

class MixedInternalOnlyContainer(bb.Struct):

    __slots__ = [
        '_public_value_value',
        '_public_value_present',
    ]

    _has_required_fields = False

    def __init__(self,
                 public_value=None):
        self._public_value_value = None
        self._public_value_present = False
        if public_value is not None:
            self.public_value = public_value

    @property
    def public_value(self):
        """
        :rtype: int
        """
        if self._public_value_present:
            return self._public_value_value
        else:
            return 0

    @public_value.setter
    def public_value(self, val):
        val = self._public_value_validator.validate(val)
        self._public_value_value = val
        self._public_value_present = True

    @public_value.deleter
    def public_value(self):
        self._public_value_value = None
        self._public_value_present = False

    def _process_custom_annotations(self, annotation_type, field_path, processor):
        super(MixedInternalOnlyContainer, self)._process_custom_annotations(annotation_type, field_path, processor)

    def __repr__(self):
        return 'MixedInternalOnlyContainer(public_value={!r})'.format(
            self._public_value_value,
        )

MixedInternalOnlyContainer_validator = bv.Struct(MixedInternalOnlyContainer)

class MixedInternalOnlyEnum(bb.Union):
    """
    This class acts as a tagged union. Only one of the ``is_*`` methods will
    return true. To get the associated value of a tag (if one exists), use the
    corresponding ``get_*`` method.
    """

    _catch_all = 'other'
    # Attribute is overwritten below the class definition
    public = None
    # Attribute is overwritten below the class definition
    other = None

    def is_public(self):
        """
        Check if the union tag is ``public``.

        :rtype: bool
        """
        return self._tag == 'public'

    def is_other(self):
        """
        Check if the union tag is ``other``.

        :rtype: bool
        """
        return self._tag == 'other'

    def _process_custom_annotations(self, annotation_type, field_path, processor):
        super(MixedInternalOnlyEnum, self)._process_custom_annotations(annotation_type, field_path, processor)

    def __repr__(self):
        return 'MixedInternalOnlyEnum(%r, %r)' % (self._tag, self._value)

MixedInternalOnlyEnum_validator = bv.Union(MixedInternalOnlyEnum)

EmptyContainer._all_field_names_ = set([])
EmptyContainer._all_fields_ = []

MixedInternalOnlyContainer._public_value_validator = bv.Int32()
MixedInternalOnlyContainer._all_field_names_ = set(['public_value'])
MixedInternalOnlyContainer._all_fields_ = [('public_value', MixedInternalOnlyContainer._public_value_validator)]

MixedInternalOnlyEnum._public_validator = bv.Void()
MixedInternalOnlyEnum._other_validator = bv.Void()
MixedInternalOnlyEnum._tagmap = {
    'public': MixedInternalOnlyEnum._public_validator,
    'other': MixedInternalOnlyEnum._other_validator,
}

MixedInternalOnlyEnum.public = MixedInternalOnlyEnum('public')
MixedInternalOnlyEnum.other = MixedInternalOnlyEnum('other')

ROUTES = {
}

