# Path: openbrokerapi/service_broker.py
# class OperationState(Enum):
#     IN_PROGRESS = "in progress"
#     SUCCEEDED = "succeeded"
#     FAILED = "failed"
# 
# class VolumeMount:
#     def __init__(self,
#                  driver: str,
#                  container_dir: str,
#                  mode: str,
#                  device_type: str,
#                  device: SharedDevice
#                  ):
#         self.driver = driver
#         self.container_dir = container_dir
#         self.mode = mode
#         self.device_type = device_type
#         self.device = device
# 
# class Service:
#     def __init__(self,
#                  id: str,
#                  name: str,
#                  description: str,
#                  bindable: bool,
#                  plans: List[ServicePlan],
#                  tags: List[str] = None,
#                  requires: List[str] = None,
#                  metadata: ServiceMetadata = None,
#                  dashboard_client: ServiceDashboardClient = None,
#                  plan_updateable: bool = False,
#                  instances_retrievable: bool = False,
#                  bindings_retrievable: bool = False,
#                  **kwargs
#                  ):
#         """
#         :param requires:  syslog_drain, route_forwarding or volume_mount
#         """
#         self.id = id
#         self.name = name
#         self.description = description
#         self.bindable = bindable
#         self.plans = plans
#         self.tags = tags
#         self.requires = requires
#         self.metadata = metadata
#         self.dashboard_client = dashboard_client
#         self.plan_updateable = plan_updateable
#         self.instances_retrievable = instances_retrievable
#         self.bindings_retrievable = bindings_retrievable
# 
#         self.__dict__.update(kwargs)


from typing import List, Optional
from openbrokerapi.service_broker import OperationState, VolumeMount, Service
                 service_id: str,
                 plan_id: str,
                 dashboard_url: Optional[str] = None,
                 parameters: Optional[dict] = None
                 ):
        self.service_id = service_id
        self.plan_id = plan_id
        self.dashboard_url = dashboard_url
        self.parameters = parameters


class BindResponse:
    def __init__(self,
                 credentials: dict = None,
                 syslog_drain_url: str = None,
                 route_service_url: str = None,
                 volume_mounts: List[VolumeMount] = None,
                 operation: Optional[str] = None
                 ):
        self.credentials = credentials
        self.syslog_drain_url = syslog_drain_url
        self.route_service_url = route_service_url
        self.volume_mounts = volume_mounts
        self.operation = operation

class GetBindingResponse:
    def __init__(self,
                 credentials: dict = None,
                 syslog_drain_url: str = None,
                 route_service_url: str = None,

# Path: openbrokerapi/service_broker.py
# class OperationState(Enum):
#     IN_PROGRESS = "in progress"
#     SUCCEEDED = "succeeded"
#     FAILED = "failed"
# 
# class VolumeMount:
#     def __init__(self,
#                  driver: str,
#                  container_dir: str,
#                  mode: str,
#                  device_type: str,
#                  device: SharedDevice
#                  ):
#         self.driver = driver
#         self.container_dir = container_dir
#         self.mode = mode
#         self.device_type = device_type
#         self.device = device
# 
# class Service:
#     def __init__(self,
#                  id: str,
#                  name: str,
#                  description: str,
#                  bindable: bool,
#                  plans: List[ServicePlan],
#                  tags: List[str] = None,
#                  requires: List[str] = None,
#                  metadata: ServiceMetadata = None,
#                  dashboard_client: ServiceDashboardClient = None,
#                  plan_updateable: bool = False,
#                  instances_retrievable: bool = False,
#                  bindings_retrievable: bool = False,
#                  **kwargs
#                  ):
#         """
#         :param requires:  syslog_drain, route_forwarding or volume_mount
#         """
#         self.id = id
#         self.name = name
#         self.description = description
#         self.bindable = bindable
#         self.plans = plans
#         self.tags = tags
#         self.requires = requires
#         self.metadata = metadata
#         self.dashboard_client = dashboard_client
#         self.plan_updateable = plan_updateable
#         self.instances_retrievable = instances_retrievable
#         self.bindings_retrievable = bindings_retrievable
# 
#         self.__dict__.update(kwargs)


# Path: openbrokerapi/response.py
from typing import List, Optional
from openbrokerapi.service_broker import OperationState, VolumeMount, Service

                 service_id: str,
                 plan_id: str,
                 dashboard_url: Optional[str] = None,
                 parameters: Optional[dict] = None
                 ):
        self.service_id = service_id
        self.plan_id = plan_id
        self.dashboard_url = dashboard_url
        self.parameters = parameters


class BindResponse:
    def __init__(self,
                 credentials: dict = None,
                 syslog_drain_url: str = None,
                 route_service_url: str = None,
                 volume_mounts: List[VolumeMount] = None,
                 operation: Optional[str] = None
                 ):
        self.credentials = credentials
        self.syslog_drain_url = syslog_drain_url
        self.route_service_url = route_service_url
        self.volume_mounts = volume_mounts
        self.operation = operation

class GetBindingResponse:
    def __init__(self,
                 credentials: dict = None,
                 syslog_drain_url: str = None,
                 route_service_url: str = None,

                 volume_mounts: List[VolumeMount] = None,