/* 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_management_group_action_type::AssetManagementGroupActionType;

#[derive(Serialize, Deserialize, Debug, Clone, Builder)]
pub struct DiscoveredAssetManagementGroupAction {
    /// Configuration for the action.
    #[serde(rename = "actionConfiguration")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub action_configuration: Option<String>,

    /// Type of the action.
    #[serde(rename = "actionType")]
    pub action_type: AssetManagementGroupActionType,

    /// Timestamp (in UTC) indicating when the management action was added or modified.
    #[serde(rename = "lastUpdatedOn")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub last_updated_on: Option<DateTime<Utc>>,

    /// Name of the action.
    pub name: String,

    /// The target URI on which a client can invoke the specific action.
    #[serde(rename = "targetUri")]
    pub target_uri: String,

    /// Response timeout for the action.
    #[serde(rename = "timeoutInSeconds")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub timeout_in_seconds: Option<u64>,

    /// The MQTT topic path on which a client will receive the request for the action.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub topic: Option<String>,

    /// URI or type definition ID.
    #[serde(rename = "typeRef")]
    #[serde(skip_serializing_if = "Option::is_none")]
    #[builder(default = "None")]
    pub type_ref: Option<String>,
}
