# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model


class Module(Model):
    """The module identity on a device.

    :param module_id: The unique identifier of the module.
    :type module_id: str
    :param managed_by: Identifies who manages this module. For instance, this
     value is \\"IotEdge\\" if the edge runtime owns this module.
    :type managed_by: str
    :param device_id: The unique identifier of the device.
    :type device_id: str
    :param generation_id: The IoT Hub generated, case-sensitive string up to
     128 characters long. This value is used to distinguish modules with the
     same moduleId, when they have been deleted and re-created.
    :type generation_id: str
    :param etag: The string representing a weak ETag for the module identity,
     as per RFC7232.
    :type etag: str
    :param connection_state: The connection state of the device. Possible
     values include: 'Disconnected', 'Connected'
    :type connection_state: str or ~service.models.enum
    :param connection_state_updated_time: The date and time the connection
     state was last updated.
    :type connection_state_updated_time: datetime
    :param last_activity_time: The date and time the device last connected,
     received, or sent a message.
    :type last_activity_time: datetime
    :param cloud_to_device_message_count: The number of cloud-to-module
     messages currently queued to be sent to the module.
    :type cloud_to_device_message_count: int
    :param authentication: The authentication mechanism used by the module
     when connecting to the service and edge hub.
    :type authentication: ~service.models.AuthenticationMechanism
    :param attributes: The collection of key-value pairs read and written by
     the solution back end.
     They are not visible to device apps. They keys are UTF-8 encoded,
     case-sensitive and up-to 1KB in length.
     Allowed characters exclude UNICODE control characters (segments C0 and
     C1), '.', '$' and space.
     The values are string, boolean, integer or array.
    :type attributes: dict[str, object]
    """

    _attribute_map = {
        'module_id': {'key': 'moduleId', 'type': 'str'},
        'managed_by': {'key': 'managedBy', 'type': 'str'},
        'device_id': {'key': 'deviceId', 'type': 'str'},
        'generation_id': {'key': 'generationId', 'type': 'str'},
        'etag': {'key': 'etag', 'type': 'str'},
        'connection_state': {'key': 'connectionState', 'type': 'str'},
        'connection_state_updated_time': {'key': 'connectionStateUpdatedTime', 'type': 'iso-8601'},
        'last_activity_time': {'key': 'lastActivityTime', 'type': 'iso-8601'},
        'cloud_to_device_message_count': {'key': 'cloudToDeviceMessageCount', 'type': 'int'},
        'authentication': {'key': 'authentication', 'type': 'AuthenticationMechanism'},
        'attributes': {'key': 'attributes', 'type': '{object}'},
    }

    def __init__(self, *, module_id: str=None, managed_by: str=None, device_id: str=None, generation_id: str=None, etag: str=None, connection_state=None, connection_state_updated_time=None, last_activity_time=None, cloud_to_device_message_count: int=None, authentication=None, attributes=None, **kwargs) -> None:
        super(Module, self).__init__(**kwargs)
        self.module_id = module_id
        self.managed_by = managed_by
        self.device_id = device_id
        self.generation_id = generation_id
        self.etag = etag
        self.connection_state = connection_state
        self.connection_state_updated_time = connection_state_updated_time
        self.last_activity_time = last_activity_time
        self.cloud_to_device_message_count = cloud_to_device_message_count
        self.authentication = authentication
        self.attributes = attributes
