"""
@generated by codestare-proto-plus.  Do not edit manually!
"""
from proto import (
    Field,
    STRING,
    module,
)

from proto.message import (
    Message,
)

from ubii.proto.v1.clients.client_pb_plus import (
    Client,
    ClientList,
)

from ubii.proto.v1.devices.component_pb_plus import (
    Component,
    ComponentList,
)

from ubii.proto.v1.devices.device_pb_plus import (
    Device,
    DeviceList,
)

from ubii.proto.v1.devices.topicDemux_pb_plus import (
    TopicDemux,
    TopicDemuxList,
)

from ubii.proto.v1.devices.topicMux_pb_plus import (
    TopicMux,
    TopicMuxList,
)

from ubii.proto.v1.processing.lockstepProcessing_pb_plus import (
    LockstepProcessingRequest,
)

from ubii.proto.v1.processing.processingModule_pb_plus import (
    ProcessingModule,
    ProcessingModuleList,
)

from ubii.proto.v1.services.request.topicSubscription_pb_plus import (
    TopicSubscription,
)

from ubii.proto.v1.sessions.session_pb_plus import (
    Session,
    SessionList,
)


__protobuf__ = module(
    package="ubii.proto.v1.services",
    marshal="ubii.proto.v1",
    manifest={
        "ServiceRequest",
    }
)


class ServiceRequest(Message):
    """
    .. admonition:: One Ofs

        This message defines the following *oneof* group[s]

        .. attribute:: type

            - 	:attr:`.client`
            - 	:attr:`.device`
            - 	:attr:`.topic_subscription`
            - 	:attr:`.session`
            - 	:attr:`.session_list`
            - 	:attr:`.processing_module`
            - 	:attr:`.processing_module_list`
            - 	:attr:`.topic_mux`
            - 	:attr:`.topic_mux_list`
            - 	:attr:`.topic_demux`
            - 	:attr:`.topic_demux_list`
            - 	:attr:`.client_list`
            - 	:attr:`.device_list`
            - 	:attr:`.lockstep_processing_request`
            - 	:attr:`.component`
            - 	:attr:`.component_list`

    Attributes:
        topic (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~proto.primitives.ProtoType.STRING`
        client (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.clients.client_pb_plus.Client` -- *oneof* :attr:`.type`
        device (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.device_pb_plus.Device` -- *oneof* :attr:`.type`
        topic_subscription (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.services.request.topicSubscription_pb_plus.TopicSubscription` -- *oneof*
            :attr:`.type`
        session (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.sessions.session_pb_plus.Session` -- *oneof* :attr:`.type`
        session_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.sessions.session_pb_plus.SessionList` -- *oneof* :attr:`.type`
        processing_module (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.processing.processingModule_pb_plus.ProcessingModule` -- *oneof*
            :attr:`.type`
        processing_module_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.processing.processingModule_pb_plus.ProcessingModuleList` -- *oneof*
            :attr:`.type`
        topic_mux (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.topicMux_pb_plus.TopicMux` -- *oneof* :attr:`.type`
        topic_mux_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.topicMux_pb_plus.TopicMuxList` -- *oneof* :attr:`.type`
        topic_demux (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.topicDemux_pb_plus.TopicDemux` -- *oneof* :attr:`.type`
        topic_demux_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.topicDemux_pb_plus.TopicDemuxList` -- *oneof* :attr:`.type`
        client_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.clients.client_pb_plus.ClientList` -- *oneof* :attr:`.type`
        device_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.device_pb_plus.DeviceList` -- *oneof* :attr:`.type`
        lockstep_processing_request (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.processing.lockstepProcessing_pb_plus.LockstepProcessingRequest` --
            *oneof* :attr:`.type`
        component (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.component_pb_plus.Component` -- *oneof* :attr:`.type`
        component_list (proto.fields.Field): :obj:`~proto.fields.Field` of type
            :obj:`~ubii.proto.v1.devices.component_pb_plus.ComponentList` -- *oneof* :attr:`.type`
    """

    topic = Field(
        STRING,
        number=1,
    )
    client = Field(
        Client,
        number=2,
        oneof='type',
    )
    device = Field(
        Device,
        number=3,
        oneof='type',
    )
    topic_subscription = Field(
        TopicSubscription,
        number=4,
        oneof='type',
    )
    session = Field(
        Session,
        number=5,
        oneof='type',
    )
    session_list = Field(
        SessionList,
        number=6,
        oneof='type',
    )
    processing_module = Field(
        ProcessingModule,
        number=7,
        oneof='type',
    )
    processing_module_list = Field(
        ProcessingModuleList,
        number=8,
        oneof='type',
    )
    topic_mux = Field(
        TopicMux,
        number=9,
        oneof='type',
    )
    topic_mux_list = Field(
        TopicMuxList,
        number=10,
        oneof='type',
    )
    topic_demux = Field(
        TopicDemux,
        number=11,
        oneof='type',
    )
    topic_demux_list = Field(
        TopicDemuxList,
        number=12,
        oneof='type',
    )
    client_list = Field(
        ClientList,
        number=13,
        oneof='type',
    )
    device_list = Field(
        DeviceList,
        number=14,
        oneof='type',
    )
    lockstep_processing_request = Field(
        LockstepProcessingRequest,
        number=15,
        oneof='type',
    )
    component = Field(
        Component,
        number=16,
        oneof='type',
    )
    component_list = Field(
        ComponentList,
        number=17,
        oneof='type',
    )

