// Auto-generated L5X types - devices category
// DO NOT EDIT - Generated by build script

use serde::{Serialize, Deserialize};
use super::*;

/// DeviceObjType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DeviceObj {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// DeviceDiagnosticProfileCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DeviceDiagnosticProfileCollection {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// DeviceDiagnosticProfile element
    #[serde(rename = "DeviceDiagnosticProfile", default)]
    pub device_diagnostic_profile: Vec<DeviceDiagnosticProfile>,
}

/// DeviceDiagnosticProfileType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DeviceDiagnosticProfile {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// Version attribute
    #[serde(rename = "@Version", default)]
    pub version: String,
    /// ProfileReferences attribute
    #[serde(rename = "@ProfileReferences", default)]
    pub profile_references: Option<String>,
    /// MessageReferences attribute
    #[serde(rename = "@MessageReferences", default)]
    pub message_references: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// ProfileDefinition element
    #[serde(rename = "ProfileDefinition", default)]
    pub profile_definition: Option<DeviceDiagnosticProfileType_ProfileDefinition_Inline>,
}

/// DeviceDiagnosticProfileType_ProfileDefinition_InlineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DeviceDiagnosticProfileType_ProfileDefinition_Inline {
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
    /// Arbitrary child elements (xs:any) - skipped during deserialization
    #[serde(skip)]
    pub children: Vec<AnyElement>,
}

/// DeviceLevelRingType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DeviceLevelRing {
    /// SupervisorModeEnabled attribute
    #[serde(rename = "@SupervisorModeEnabled", default)]
    pub supervisor_mode_enabled: Option<String>,
    /// SupervisorPrecedence attribute
    #[serde(rename = "@SupervisorPrecedence", default)]
    pub supervisor_precedence: Option<String>,
    /// BeaconInterval attribute
    #[serde(rename = "@BeaconInterval", default)]
    pub beacon_interval: Option<String>,
    /// BeaconTimeout attribute
    #[serde(rename = "@BeaconTimeout", default)]
    pub beacon_timeout: Option<String>,
    /// VLANID attribute
    #[serde(rename = "@VLANID", default)]
    pub vlanid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

