Models

from typing import Any, Dict, List, Literal, Optional, Union

VariableOptionTypeDef = Literal["variable"]

GlobalOptionTypeDef = Literal["global"]

InterfaceTrackTypeDef = Literal[
    "ip-routing", "ipv6-routing", "line-protocol"
]

DefaultOptionTypeDef = Literal["default"]

DefaultInterfaceTrackTypeDef = Literal["line-protocol"]

Ipv4SubnetMaskDef = Literal[
    "0.0.0.0",
    "128.0.0.0",
    "192.0.0.0",
    "224.0.0.0",
    "240.0.0.0",
    "248.0.0.0",
    "252.0.0.0",
    "254.0.0.0",
    "255.0.0.0",
    "255.128.0.0",
    "255.192.0.0",
    "255.224.0.0",
    "255.240.0.0",
    "255.252.0.0",
    "255.254.0.0",
    "255.255.0.0",
    "255.255.128.0",
    "255.255.192.0",
    "255.255.224.0",
    "255.255.240.0",
    "255.255.248.0",
    "255.255.252.0",
    "255.255.254.0",
    "255.255.255.0",
    "255.255.255.128",
    "255.255.255.192",
    "255.255.255.224",
    "255.255.255.240",
    "255.255.255.248",
    "255.255.255.252",
    "255.255.255.254",
    "255.255.255.255",
]


class OneOfTrackerObjectIdDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfTrackerObjectIdDef2:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfInterfaceNameV2OptionsNoDefaultDef1:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfInterfaceNameV2OptionsNoDefaultDef2:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfInterfaceTrackTypeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: InterfaceTrackTypeDef


class OneOfInterfaceTrackTypeOptionsDef2:
    option_type: DefaultOptionTypeDef
    value: DefaultInterfaceTrackTypeDef  # pytype: disable=annotation-type-mismatch


class OneOfInterfaceTrackTypeOptionsDef3:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfInterfaceObjectTrackerConfigDef:
    if_name: Union[
        OneOfInterfaceNameV2OptionsNoDefaultDef1,
        OneOfInterfaceNameV2OptionsNoDefaultDef2,
    ]
    interface_track_type: Union[
        OneOfInterfaceTrackTypeOptionsDef1,
        OneOfInterfaceTrackTypeOptionsDef2,
        OneOfInterfaceTrackTypeOptionsDef3,
    ]


class OneOfObjectTrackerConfigOptionsDef1:
    interface: OneOfInterfaceObjectTrackerConfigDef


class OneOfIpV4AddressOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpV4AddressOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: Any


class OneOfIpV4SubnetMaskOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfIpV4SubnetMaskOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: (
        Ipv4SubnetMaskDef  # pytype: disable=annotation-type-mismatch
    )


class OneOfVrfOptionsWithDefault1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfVrfOptionsWithDefault2:
    option_type: GlobalOptionTypeDef
    value: str


class OneOfVrfOptionsWithDefault3:
    option_type: DefaultOptionTypeDef


class OneOfRouteObjectTrackerConfigDef:
    address: Union[
        OneOfIpV4AddressOptionsDef1, OneOfIpV4AddressOptionsDef2
    ]
    mask: Union[
        OneOfIpV4SubnetMaskOptionsDef1, OneOfIpV4SubnetMaskOptionsDef2
    ]
    vrf_name: Union[
        OneOfVrfOptionsWithDefault1,
        OneOfVrfOptionsWithDefault2,
        OneOfVrfOptionsWithDefault3,
    ]


class OneOfObjectTrackerConfigOptionsDef2:
    route: OneOfRouteObjectTrackerConfigDef


class OneOfDelayUpTimeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfDelayUpTimeOptionsDef2:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfDelayUpTimeOptionsDef3:
    option_type: DefaultOptionTypeDef


class OneOfDelayDownTimeOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int


class OneOfDelayDownTimeOptionsDef2:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]


class OneOfDelayDownTimeOptionsDef3:
    option_type: DefaultOptionTypeDef


class ObjecttrackerData:
    delay_down_time: Union[
        OneOfDelayDownTimeOptionsDef1,
        OneOfDelayDownTimeOptionsDef2,
        OneOfDelayDownTimeOptionsDef3,
    ]
    delay_up_time: Union[
        OneOfDelayUpTimeOptionsDef1,
        OneOfDelayUpTimeOptionsDef2,
        OneOfDelayUpTimeOptionsDef3,
    ]
    tracker_config: Union[
        OneOfObjectTrackerConfigOptionsDef1,
        OneOfObjectTrackerConfigOptionsDef2,
    ]
    tracker_id: Union[
        OneOfTrackerObjectIdDef1, OneOfTrackerObjectIdDef2
    ]


class Payload:
    """
    SD-Routing Object tracker feature schema
    """

    data: ObjecttrackerData
    description: Optional[str]
    metadata: Optional[Any]
    name: Optional[str]


class Data:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # SD-Routing Object tracker feature schema
    payload: Optional[Payload]


class GetListSdRoutingTransportObjecttrackerPayload:
    data: Optional[List[Data]]


class CreateSdroutingTransportObjectTrackerFeaturePostResponse:
    """
    Profile Parcel POST Response schema
    """

    parcel_id: str
    metadata: Optional[Any]


class TransportObjecttrackerData:
    delay_down_time: Union[
        OneOfDelayDownTimeOptionsDef1,
        OneOfDelayDownTimeOptionsDef2,
        OneOfDelayDownTimeOptionsDef3,
    ]
    delay_up_time: Union[
        OneOfDelayUpTimeOptionsDef1,
        OneOfDelayUpTimeOptionsDef2,
        OneOfDelayUpTimeOptionsDef3,
    ]
    tracker_config: Union[
        OneOfObjectTrackerConfigOptionsDef1,
        OneOfObjectTrackerConfigOptionsDef2,
    ]
    tracker_id: Union[
        OneOfTrackerObjectIdDef1, OneOfTrackerObjectIdDef2
    ]


class CreateSdroutingTransportObjectTrackerFeaturePostRequest:
    """
    SD-Routing Object tracker feature schema
    """

    data: TransportObjecttrackerData
    description: Optional[str]
    metadata: Optional[Any]
    name: Optional[str]


class GetSingleSdRoutingTransportObjecttrackerPayload:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # SD-Routing Object tracker feature schema
    payload: Optional[Payload]


class EditSdroutingTransportObjectTrackerFeaturePutResponse:
    """
    Profile Parcel PUT Response schema
    """

    id: str
    metadata: Optional[Any]


class SdRoutingTransportObjecttrackerData:
    delay_down_time: Union[
        OneOfDelayDownTimeOptionsDef1,
        OneOfDelayDownTimeOptionsDef2,
        OneOfDelayDownTimeOptionsDef3,
    ]
    delay_up_time: Union[
        OneOfDelayUpTimeOptionsDef1,
        OneOfDelayUpTimeOptionsDef2,
        OneOfDelayUpTimeOptionsDef3,
    ]
    tracker_config: Union[
        OneOfObjectTrackerConfigOptionsDef1,
        OneOfObjectTrackerConfigOptionsDef2,
    ]
    tracker_id: Union[
        OneOfTrackerObjectIdDef1, OneOfTrackerObjectIdDef2
    ]


class EditSdroutingTransportObjectTrackerFeaturePutRequest:
    """
    SD-Routing Object tracker feature schema
    """

    data: SdRoutingTransportObjecttrackerData
    description: Optional[str]
    metadata: Optional[Any]
    name: Optional[str]