/* Code generated by Azure.Iot.Operations.ProtocolCompilerLib v1.0.0.0; DO NOT EDIT. */
#![allow(unused_imports)]

use std::collections::HashMap;

use chrono::{DateTime, Utc};
use derive_builder::Builder;
use iso8601_duration::Duration;
use serde::{Deserialize, Serialize};
use uuid::Uuid;

use super::super::common_types::{b64::Bytes, date_only::Date, decimal::Decimal, time_only::Time};
use super::asset_dataset_event_stream_status::AssetDatasetEventStreamStatus;
use super::asset_event_group_status_schema_element_schema::AssetEventGroupStatusSchemaElementSchema;
use super::asset_management_group_status_schema_element_schema::AssetManagementGroupStatusSchemaElementSchema;
use super::config_status::ConfigStatus;

/// The asset status
#[derive(Serialize, Deserialize, Debug, Clone, Builder)]
pub struct AssetStatus {
    /// The configuration status of the asset.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub config: Option<ConfigStatus>,

    /// Array of dataset statuses that describe the status of each dataset.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub datasets: Option<Vec<AssetDatasetEventStreamStatus>>,

    /// Array of event group statuses that describe the status of each event group.
    #[serde(rename = "eventGroups")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub event_groups: Option<Vec<AssetEventGroupStatusSchemaElementSchema>>,

    /// Array of management group statuses that describe the status of each management group.
    #[serde(rename = "managementGroups")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub management_groups: Option<Vec<AssetManagementGroupStatusSchemaElementSchema>>,

    /// Array of stream statuses that describe the status of each stream.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub streams: Option<Vec<AssetDatasetEventStreamStatus>>,
}
