# generated by datamodel-codegen:
#   filename:  serialization_aliases.json
#   timestamp: 2019-07-26T00:00:00+00:00

from __future__ import annotations

from typing import Any

from pydantic import AliasChoices, BaseModel, Field


class SendMessageV2(BaseModel):
    message: str = Field(
        ...,
        serialization_alias='messageText',
        validation_alias=AliasChoices('textMessage', 'message', 'text'),
    )


class OtherMessage(BaseModel):
    other_name: str = Field(..., serialization_alias='otherName')


class SameNameMessage(BaseModel):
    same_name: str = Field(..., serialization_alias='same_name')


class RequiredOnlyMessage(BaseModel):
    known_name: str = Field(..., serialization_alias='known-name')
    missingRequiredInput: Any = Field(
        ...,
        serialization_alias='missingRequired',
        validation_alias=AliasChoices('missing-required', 'missingRequiredInput'),
    )
    plainMissingInput: Any = Field(..., serialization_alias='plainMissing')
    allof_unmapped: Any = Field(..., serialization_alias='allof-unmapped')


class RequiredOnlyGrandBase(BaseModel):
    grand_name: int = Field(..., serialization_alias='grand-name')
    bare_name: Any = Field(..., serialization_alias='bare-name')


class RequiredOnlyBase(RequiredOnlyGrandBase):
    base_name: str = Field(..., serialization_alias='base-name')


class RequiredOnlyRefMessage(RequiredOnlyBase):
    own_name: str = Field(..., serialization_alias='own-name')
    grand_name: int = Field(
        ...,
        serialization_alias='grandName',
        validation_alias=AliasChoices('grand-name', 'grandInput'),
    )
    bare_name: Any = Field(..., serialization_alias='bareName')
    ignored_missing: Any = Field(..., serialization_alias='ignored-missing')
    refMissingInput: Any = Field(
        ...,
        serialization_alias='refMissingRequired',
        validation_alias=AliasChoices('ref-missing-required', 'refMissingInput'),
    )
    refPlainMissingInput: Any = Field(..., serialization_alias='refPlainMissing')


class RequiredOnlyEmptyAllOfBase(BaseModel):
    pass


class RequiredOnlyEmptyAllOfMessage(RequiredOnlyEmptyAllOfBase):
    emptyMissingInput: Any = Field(
        ...,
        serialization_alias='emptyMissing',
        validation_alias=AliasChoices('empty-missing', 'emptyMissingInput'),
    )


class RequiredOnlyRecursiveEmptyGrandBase(BaseModel):
    unrelated_name: str | None = Field(None, serialization_alias='unrelated-name')


class RequiredOnlyRecursiveEmptyBase(RequiredOnlyRecursiveEmptyGrandBase):
    pass


class RequiredOnlyRecursiveEmptyMessage(RequiredOnlyRecursiveEmptyBase):
    recursiveMissingInput: Any = Field(..., serialization_alias='recursiveMissing')


class Messaging(BaseModel):
    send: SendMessageV2 | None = None
    other: OtherMessage | None = None
    same: SameNameMessage | None = None
    requiredOnly: RequiredOnlyMessage | None = None
    requiredOnlyRef: RequiredOnlyRefMessage | None = None
    requiredOnlyEmptyAllOf: RequiredOnlyEmptyAllOfMessage | None = None
    requiredOnlyRecursiveEmpty: RequiredOnlyRecursiveEmptyMessage | None = None
