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

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

/// SafetyInfoType_SafetyTagMap_InlineType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SafetyInfoType_SafetyTagMap_Inline {
    /// Text content
    #[serde(rename = "$text", default, skip_serializing_if = "Option::is_none")]
    pub text: Option<String>,
}

/// ConfigTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ConfigTag {
    /// Suffix attribute
    #[serde(rename = "@Suffix", default, skip_serializing_if = "Option::is_none")]
    pub suffix: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// ConfigSize attribute
    #[serde(rename = "@ConfigSize", default, skip_serializing_if = "Option::is_none")]
    pub config_size: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default, skip_serializing_if = "Option::is_none")]
    pub data_type: Option<String>,
    /// Dimensions attribute
    #[serde(rename = "@Dimensions", default, skip_serializing_if = "Option::is_none")]
    pub dimensions: Option<String>,
    /// Radix attribute
    #[serde(rename = "@Radix", default, skip_serializing_if = "Option::is_none")]
    pub radix: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default, skip_serializing_if = "Option::is_none")]
    pub external_access: Option<String>,
    /// Constant attribute
    #[serde(rename = "@Constant", default, skip_serializing_if = "Option::is_none")]
    pub constant: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default, skip_serializing_if = "Option::is_none")]
    pub permission_set: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default, skip_serializing_if = "Option::is_none")]
    pub tracking_groups: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Vec::is_empty")]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Vec::is_empty")]
    pub description: Vec<Description>,
    /// Data element
    #[serde(rename = "Data", default, skip_serializing_if = "Vec::is_empty")]
    pub data: Vec<DataWide>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Vec::is_empty")]
    pub comments: Vec<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Vec::is_empty")]
    pub engineering_units: Vec<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Vec::is_empty")]
    pub maxes: Vec<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Vec::is_empty")]
    pub mins: Vec<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Vec::is_empty")]
    pub state0s: Vec<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Vec::is_empty")]
    pub state1s: Vec<State1Collection>,
}

/// ConfigScriptType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ConfigScript {
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// Size attribute
    #[serde(rename = "@Size", default)]
    pub size: String,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Data element
    #[serde(rename = "Data", default, skip_serializing_if = "Vec::is_empty")]
    pub data: Vec<DataWide>,
}

/// InputTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct InputTag {
    /// Suffix attribute
    #[serde(rename = "@Suffix", default, skip_serializing_if = "Option::is_none")]
    pub suffix: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default, skip_serializing_if = "Option::is_none")]
    pub data_type: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default, skip_serializing_if = "Option::is_none")]
    pub external_access: Option<String>,
    /// Constant attribute
    #[serde(rename = "@Constant", default, skip_serializing_if = "Option::is_none")]
    pub constant: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default, skip_serializing_if = "Option::is_none")]
    pub permission_set: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default, skip_serializing_if = "Option::is_none")]
    pub tracking_groups: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Vec::is_empty")]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Vec::is_empty")]
    pub description: Vec<Description>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Vec::is_empty")]
    pub comments: Vec<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Vec::is_empty")]
    pub engineering_units: Vec<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Vec::is_empty")]
    pub maxes: Vec<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Vec::is_empty")]
    pub mins: Vec<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Vec::is_empty")]
    pub state0s: Vec<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Vec::is_empty")]
    pub state1s: Vec<State1Collection>,
    /// Data element
    #[serde(rename = "Data", default, skip_serializing_if = "Vec::is_empty")]
    pub data: Vec<DataWide>,
    /// ForceData element
    #[serde(rename = "ForceData", default, skip_serializing_if = "Vec::is_empty")]
    pub force_data: Vec<ForceDataWide>,
}

/// OutputTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OutputTag {
    /// Suffix attribute
    #[serde(rename = "@Suffix", default, skip_serializing_if = "Option::is_none")]
    pub suffix: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default, skip_serializing_if = "Option::is_none")]
    pub data_type: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default, skip_serializing_if = "Option::is_none")]
    pub external_access: Option<String>,
    /// Constant attribute
    #[serde(rename = "@Constant", default, skip_serializing_if = "Option::is_none")]
    pub constant: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default, skip_serializing_if = "Option::is_none")]
    pub permission_set: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default, skip_serializing_if = "Option::is_none")]
    pub tracking_groups: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Vec::is_empty")]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Vec::is_empty")]
    pub description: Vec<Description>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Vec::is_empty")]
    pub comments: Vec<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Vec::is_empty")]
    pub engineering_units: Vec<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Vec::is_empty")]
    pub maxes: Vec<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Vec::is_empty")]
    pub mins: Vec<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Vec::is_empty")]
    pub state0s: Vec<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Vec::is_empty")]
    pub state1s: Vec<State1Collection>,
    /// Data element
    #[serde(rename = "Data", default, skip_serializing_if = "Vec::is_empty")]
    pub data: Vec<DataWide>,
    /// ForceData element
    #[serde(rename = "ForceData", default, skip_serializing_if = "Vec::is_empty")]
    pub force_data: Vec<ForceDataWide>,
}

/// InAliasTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct InAliasTag {
    /// Suffix attribute
    #[serde(rename = "@Suffix", default, skip_serializing_if = "Option::is_none")]
    pub suffix: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Option::is_none")]
    pub description: Option<Description>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Option::is_none")]
    pub comments: Option<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Option::is_none")]
    pub engineering_units: Option<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Option::is_none")]
    pub maxes: Option<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Option::is_none")]
    pub mins: Option<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Option::is_none")]
    pub state0s: Option<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Option::is_none")]
    pub state1s: Option<State1Collection>,
}

/// OutAliasTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct OutAliasTag {
    /// Suffix attribute
    #[serde(rename = "@Suffix", default, skip_serializing_if = "Option::is_none")]
    pub suffix: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Option::is_none")]
    pub description: Option<Description>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Option::is_none")]
    pub comments: Option<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Option::is_none")]
    pub engineering_units: Option<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Option::is_none")]
    pub maxes: Option<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Option::is_none")]
    pub mins: Option<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Option::is_none")]
    pub state0s: Option<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Option::is_none")]
    pub state1s: Option<State1Collection>,
}

/// LocalizedAdditionalHelpTextType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LocalizedAdditionalHelpText {
    /// Lang attribute
    #[serde(rename = "@Lang", default)]
    pub lang: String,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Text content
    #[serde(rename = "$text", default, skip_serializing_if = "Option::is_none")]
    pub text: Option<String>,
}

/// UDILocalTagCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UDILocalTagCollection {
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// LocalTag element
    #[serde(rename = "LocalTag", default, skip_serializing_if = "Vec::is_empty")]
    pub local_tag: Vec<UDILocalTag>,
}

/// UDILocalTagType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UDILocalTag {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default)]
    pub data_type: String,
    /// DataTypeUId attribute
    #[serde(rename = "@DataTypeUId", default, skip_serializing_if = "Option::is_none")]
    pub data_type_uid: Option<String>,
    /// Dimensions attribute
    #[serde(rename = "@Dimensions", default, skip_serializing_if = "Option::is_none")]
    pub dimensions: Option<String>,
    /// Radix attribute
    #[serde(rename = "@Radix", default, skip_serializing_if = "Option::is_none")]
    pub radix: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default, skip_serializing_if = "Option::is_none")]
    pub external_access: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Option::is_none")]
    pub description: Option<Description>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Option::is_none")]
    pub comments: Option<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Option::is_none")]
    pub engineering_units: Option<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Option::is_none")]
    pub maxes: Option<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Option::is_none")]
    pub mins: Option<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Option::is_none")]
    pub state0s: Option<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Option::is_none")]
    pub state1s: Option<State1Collection>,
    /// DefaultData element
    #[serde(rename = "DefaultData", default, skip_serializing_if = "Vec::is_empty")]
    pub default_data: Vec<DefaultDataWide>,
}

/// TagCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TagCollection {
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Tag element
    #[serde(rename = "Tag", default, skip_serializing_if = "Vec::is_empty")]
    pub tag: Vec<Tag>,
}

/// TagType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Tag {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default, skip_serializing_if = "Option::is_none")]
    pub parent_uid: Option<String>,
    /// Class attribute
    #[serde(rename = "@Class", default, skip_serializing_if = "Option::is_none")]
    pub class: Option<String>,
    /// TagType attribute
    #[serde(rename = "@TagType", default, skip_serializing_if = "Option::is_none")]
    pub tag_type: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default, skip_serializing_if = "Option::is_none")]
    pub data_type: Option<String>,
    /// DataTypeUId attribute
    #[serde(rename = "@DataTypeUId", default, skip_serializing_if = "Option::is_none")]
    pub data_type_uid: Option<String>,
    /// Dimensions attribute
    #[serde(rename = "@Dimensions", default, skip_serializing_if = "Option::is_none")]
    pub dimensions: Option<String>,
    /// Radix attribute
    #[serde(rename = "@Radix", default, skip_serializing_if = "Option::is_none")]
    pub radix: Option<String>,
    /// AliasFor attribute
    #[serde(rename = "@AliasFor", default, skip_serializing_if = "Option::is_none")]
    pub alias_for: Option<String>,
    /// AliasBase attribute
    #[serde(rename = "@AliasBase", default, skip_serializing_if = "Option::is_none")]
    pub alias_base: Option<String>,
    /// Usage attribute
    #[serde(rename = "@Usage", default, skip_serializing_if = "Option::is_none")]
    pub usage: Option<String>,
    /// Sequencing attribute
    #[serde(rename = "@Sequencing", default, skip_serializing_if = "Option::is_none")]
    pub sequencing: Option<String>,
    /// Constant attribute
    #[serde(rename = "@Constant", default, skip_serializing_if = "Option::is_none")]
    pub constant: Option<String>,
    /// Required attribute
    #[serde(rename = "@Required", default, skip_serializing_if = "Option::is_none")]
    pub required: Option<String>,
    /// Visible attribute
    #[serde(rename = "@Visible", default, skip_serializing_if = "Option::is_none")]
    pub visible: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default, skip_serializing_if = "Option::is_none")]
    pub external_access: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default, skip_serializing_if = "Option::is_none")]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default, skip_serializing_if = "Option::is_none")]
    pub min: Option<String>,
    /// IO attribute
    #[serde(rename = "@IO", default, skip_serializing_if = "Option::is_none")]
    pub io: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default, skip_serializing_if = "Option::is_none")]
    pub permission_set: Option<String>,
    /// Scope attribute
    #[serde(rename = "@Scope", default, skip_serializing_if = "Option::is_none")]
    pub scope: Option<String>,
    /// CanForce attribute
    #[serde(rename = "@CanForce", default, skip_serializing_if = "Option::is_none")]
    pub can_force: Option<String>,
    /// FullName attribute
    #[serde(rename = "@FullName", default, skip_serializing_if = "Option::is_none")]
    pub full_name: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default, skip_serializing_if = "Option::is_none")]
    pub verified: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default, skip_serializing_if = "Option::is_none")]
    pub tracking_groups: Option<String>,
    /// CanBeNull attribute
    #[serde(rename = "@CanBeNull", default, skip_serializing_if = "Option::is_none")]
    pub can_be_null: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Vec::is_empty")]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// ConsumeInfo element
    #[serde(rename = "ConsumeInfo", default, skip_serializing_if = "Vec::is_empty")]
    pub consume_info: Vec<ConsumeTagInfo>,
    /// ProduceInfo element
    #[serde(rename = "ProduceInfo", default, skip_serializing_if = "Vec::is_empty")]
    pub produce_info: Vec<ProduceTagInfo>,
    /// TagConfiguration element
    #[serde(rename = "TagConfiguration", default, skip_serializing_if = "Vec::is_empty")]
    pub tag_configuration: Vec<TagConfigurationAdaptor>,
    /// AlarmConditions element
    #[serde(rename = "AlarmConditions", default, skip_serializing_if = "Vec::is_empty")]
    pub alarm_conditions: Vec<ConfiguredAlarmCollectionAdaptor>,
    /// Description element
    #[serde(rename = "Description", default, skip_serializing_if = "Vec::is_empty")]
    pub description: Vec<Description>,
    /// BaseDescription element
    #[serde(rename = "BaseDescription", default, skip_serializing_if = "Vec::is_empty")]
    pub base_description: Vec<String>,
    /// Comments element
    #[serde(rename = "Comments", default, skip_serializing_if = "Vec::is_empty")]
    pub comments: Vec<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default, skip_serializing_if = "Vec::is_empty")]
    pub engineering_units: Vec<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default, skip_serializing_if = "Vec::is_empty")]
    pub maxes: Vec<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default, skip_serializing_if = "Vec::is_empty")]
    pub mins: Vec<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default, skip_serializing_if = "Vec::is_empty")]
    pub state0s: Vec<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default, skip_serializing_if = "Vec::is_empty")]
    pub state1s: Vec<State1Collection>,
    /// Librarys element
    #[serde(rename = "Librarys", default, skip_serializing_if = "Vec::is_empty")]
    pub librarys: Vec<LibraryAdaptorCollection>,
    /// Labels element
    #[serde(rename = "Labels", default, skip_serializing_if = "Vec::is_empty")]
    pub labels: Vec<LabelsWide>,
    /// Instructions element
    #[serde(rename = "Instructions", default, skip_serializing_if = "Vec::is_empty")]
    pub instructions: Vec<InstructionAdaptorCollection>,
    /// Areas element
    #[serde(rename = "Areas", default, skip_serializing_if = "Vec::is_empty")]
    pub areas: Vec<AreaAdaptorCollection>,
    /// URLs element
    #[serde(rename = "URLs", default, skip_serializing_if = "Vec::is_empty")]
    pub urls: Vec<URLAdaptorCollection>,
    /// Navigations element
    #[serde(rename = "Navigations", default, skip_serializing_if = "Vec::is_empty")]
    pub navigations: Vec<NavigationCollection>,
    /// Data element
    #[serde(rename = "Data", default, skip_serializing_if = "Vec::is_empty")]
    pub data: Vec<DataWide>,
    /// ForceData element
    #[serde(rename = "ForceData", default, skip_serializing_if = "Vec::is_empty")]
    pub force_data: Vec<ForceDataWide>,
    /// Text content
    #[serde(rename = "$text", default, skip_serializing_if = "Option::is_none")]
    pub text: Option<String>,
}

/// ConsumeTagInfoType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ConsumeTagInfo {
    /// Producer attribute
    #[serde(rename = "@Producer", default)]
    pub producer: String,
    /// RemoteTag attribute
    #[serde(rename = "@RemoteTag", default, skip_serializing_if = "Option::is_none")]
    pub remote_tag: Option<String>,
    /// RemoteInstance attribute
    #[serde(rename = "@RemoteInstance", default, skip_serializing_if = "Option::is_none")]
    pub remote_instance: Option<String>,
    /// RPI attribute
    #[serde(rename = "@RPI", default)]
    pub rpi: String,
    /// TimeoutMultiplier attribute
    #[serde(rename = "@TimeoutMultiplier", default, skip_serializing_if = "Option::is_none")]
    pub timeout_multiplier: Option<String>,
    /// NetworkDelayMultiplier attribute
    #[serde(rename = "@NetworkDelayMultiplier", default, skip_serializing_if = "Option::is_none")]
    pub network_delay_multiplier: Option<String>,
    /// ReactionTimeLimit attribute
    #[serde(rename = "@ReactionTimeLimit", default, skip_serializing_if = "Option::is_none")]
    pub reaction_time_limit: Option<String>,
    /// MaxObservedNetworkDelay attribute
    #[serde(rename = "@MaxObservedNetworkDelay", default, skip_serializing_if = "Option::is_none")]
    pub max_observed_network_delay: Option<String>,
    /// Unicast attribute
    #[serde(rename = "@Unicast", default, skip_serializing_if = "Option::is_none")]
    pub unicast: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// ProduceTagInfoType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ProduceTagInfo {
    /// ProduceCount attribute
    #[serde(rename = "@ProduceCount", default, skip_serializing_if = "Option::is_none")]
    pub produce_count: Option<String>,
    /// PLCMappingFile attribute
    #[serde(rename = "@PLCMappingFile", default, skip_serializing_if = "Option::is_none")]
    pub plcmapping_file: Option<String>,
    /// PLC2Mapping attribute
    #[serde(rename = "@PLC2Mapping", default, skip_serializing_if = "Option::is_none")]
    pub plc2_mapping: Option<String>,
    /// ProgrammaticallySendEventTrigger attribute
    #[serde(rename = "@ProgrammaticallySendEventTrigger", default, skip_serializing_if = "Option::is_none")]
    pub programmatically_send_event_trigger: Option<String>,
    /// UnicastPermitted attribute
    #[serde(rename = "@UnicastPermitted", default, skip_serializing_if = "Option::is_none")]
    pub unicast_permitted: Option<String>,
    /// MinimumRPI attribute
    #[serde(rename = "@MinimumRPI", default, skip_serializing_if = "Option::is_none")]
    pub minimum_rpi: Option<String>,
    /// MaximumRPI attribute
    #[serde(rename = "@MaximumRPI", default, skip_serializing_if = "Option::is_none")]
    pub maximum_rpi: Option<String>,
    /// DefaultRPI attribute
    #[serde(rename = "@DefaultRPI", default, skip_serializing_if = "Option::is_none")]
    pub default_rpi: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// ConfiguredAlarmCollectionAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ConfiguredAlarmCollectionAdaptor {
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// AlarmCondition element
    #[serde(rename = "AlarmCondition", default, skip_serializing_if = "Vec::is_empty")]
    pub alarm_condition: Vec<ConfiguredAlarmAdaptor>,
}

/// ConfiguredAlarmAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ConfiguredAlarmAdaptor {
    /// InFault attribute
    #[serde(rename = "@InFault", default, skip_serializing_if = "Option::is_none")]
    pub in_fault: Option<String>,
    /// AckRequired attribute
    #[serde(rename = "@AckRequired", default, skip_serializing_if = "Option::is_none")]
    pub ack_required: Option<String>,
    /// Latched attribute
    #[serde(rename = "@Latched", default, skip_serializing_if = "Option::is_none")]
    pub latched: Option<String>,
    /// ProgAck attribute
    #[serde(rename = "@ProgAck", default, skip_serializing_if = "Option::is_none")]
    pub prog_ack: Option<String>,
    /// OperAck attribute
    #[serde(rename = "@OperAck", default, skip_serializing_if = "Option::is_none")]
    pub oper_ack: Option<String>,
    /// ProgReset attribute
    #[serde(rename = "@ProgReset", default, skip_serializing_if = "Option::is_none")]
    pub prog_reset: Option<String>,
    /// OperReset attribute
    #[serde(rename = "@OperReset", default, skip_serializing_if = "Option::is_none")]
    pub oper_reset: Option<String>,
    /// ProgSuppress attribute
    #[serde(rename = "@ProgSuppress", default, skip_serializing_if = "Option::is_none")]
    pub prog_suppress: Option<String>,
    /// OperSuppress attribute
    #[serde(rename = "@OperSuppress", default, skip_serializing_if = "Option::is_none")]
    pub oper_suppress: Option<String>,
    /// ProgUnsuppress attribute
    #[serde(rename = "@ProgUnsuppress", default, skip_serializing_if = "Option::is_none")]
    pub prog_unsuppress: Option<String>,
    /// OperUnsuppress attribute
    #[serde(rename = "@OperUnsuppress", default, skip_serializing_if = "Option::is_none")]
    pub oper_unsuppress: Option<String>,
    /// OperShelve attribute
    #[serde(rename = "@OperShelve", default, skip_serializing_if = "Option::is_none")]
    pub oper_shelve: Option<String>,
    /// ProgUnshelve attribute
    #[serde(rename = "@ProgUnshelve", default, skip_serializing_if = "Option::is_none")]
    pub prog_unshelve: Option<String>,
    /// OperUnshelve attribute
    #[serde(rename = "@OperUnshelve", default, skip_serializing_if = "Option::is_none")]
    pub oper_unshelve: Option<String>,
    /// ProgDisable attribute
    #[serde(rename = "@ProgDisable", default, skip_serializing_if = "Option::is_none")]
    pub prog_disable: Option<String>,
    /// OperDisable attribute
    #[serde(rename = "@OperDisable", default, skip_serializing_if = "Option::is_none")]
    pub oper_disable: Option<String>,
    /// ProgEnable attribute
    #[serde(rename = "@ProgEnable", default, skip_serializing_if = "Option::is_none")]
    pub prog_enable: Option<String>,
    /// OperEnable attribute
    #[serde(rename = "@OperEnable", default, skip_serializing_if = "Option::is_none")]
    pub oper_enable: Option<String>,
    /// AlarmCountReset attribute
    #[serde(rename = "@AlarmCountReset", default, skip_serializing_if = "Option::is_none")]
    pub alarm_count_reset: Option<String>,
    /// Used attribute
    #[serde(rename = "@Used", default, skip_serializing_if = "Option::is_none")]
    pub used: Option<String>,
    /// AlarmSetOperIncluded attribute
    #[serde(rename = "@AlarmSetOperIncluded", default, skip_serializing_if = "Option::is_none")]
    pub alarm_set_oper_included: Option<String>,
    /// AlarmSetRollupIncluded attribute
    #[serde(rename = "@AlarmSetRollupIncluded", default, skip_serializing_if = "Option::is_none")]
    pub alarm_set_rollup_included: Option<String>,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Input attribute
    #[serde(rename = "@Input", default)]
    pub input: String,
    /// ConditionType attribute
    #[serde(rename = "@ConditionType", default, skip_serializing_if = "Option::is_none")]
    pub condition_type: Option<String>,
    /// AlarmConditionDefinition attribute
    #[serde(rename = "@AlarmConditionDefinition", default, skip_serializing_if = "Option::is_none")]
    pub alarm_condition_definition: Option<String>,
    /// Limit attribute
    #[serde(rename = "@Limit", default, skip_serializing_if = "Option::is_none")]
    pub limit: Option<String>,
    /// Severity attribute
    #[serde(rename = "@Severity", default, skip_serializing_if = "Option::is_none")]
    pub severity: Option<String>,
    /// OnDelay attribute
    #[serde(rename = "@OnDelay", default, skip_serializing_if = "Option::is_none")]
    pub on_delay: Option<String>,
    /// OffDelay attribute
    #[serde(rename = "@OffDelay", default, skip_serializing_if = "Option::is_none")]
    pub off_delay: Option<String>,
    /// ShelveDuration attribute
    #[serde(rename = "@ShelveDuration", default, skip_serializing_if = "Option::is_none")]
    pub shelve_duration: Option<String>,
    /// MaxShelveDuration attribute
    #[serde(rename = "@MaxShelveDuration", default, skip_serializing_if = "Option::is_none")]
    pub max_shelve_duration: Option<String>,
    /// Deadband attribute
    #[serde(rename = "@Deadband", default, skip_serializing_if = "Option::is_none")]
    pub deadband: Option<String>,
    /// EvaluationPeriod attribute
    #[serde(rename = "@EvaluationPeriod", default, skip_serializing_if = "Option::is_none")]
    pub evaluation_period: Option<String>,
    /// Expression attribute
    #[serde(rename = "@Expression", default, skip_serializing_if = "Option::is_none")]
    pub expression: Option<String>,
    /// TargetTag attribute
    #[serde(rename = "@TargetTag", default, skip_serializing_if = "Option::is_none")]
    pub target_tag: Option<String>,
    /// AssocTag1 attribute
    #[serde(rename = "@AssocTag1", default, skip_serializing_if = "Option::is_none")]
    pub assoc_tag1: Option<String>,
    /// AssocTag2 attribute
    #[serde(rename = "@AssocTag2", default, skip_serializing_if = "Option::is_none")]
    pub assoc_tag2: Option<String>,
    /// AssocTag3 attribute
    #[serde(rename = "@AssocTag3", default, skip_serializing_if = "Option::is_none")]
    pub assoc_tag3: Option<String>,
    /// AssocTag4 attribute
    #[serde(rename = "@AssocTag4", default, skip_serializing_if = "Option::is_none")]
    pub assoc_tag4: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default, skip_serializing_if = "Option::is_none")]
    pub uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// AlarmConfig element
    #[serde(rename = "AlarmConfig", default, skip_serializing_if = "Option::is_none")]
    pub alarm_config: Option<AlarmConfig>,
}

/// TagConfigurationsAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TagConfigurationsAdaptor {
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// TagConfiguration element
    #[serde(rename = "TagConfiguration", default, skip_serializing_if = "Vec::is_empty")]
    pub tag_configuration: Vec<TagConfigurationAdaptor>,
}

/// TagConfigurationAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TagConfigurationAdaptor {
    /// TagName attribute
    #[serde(rename = "@TagName", default, skip_serializing_if = "Option::is_none")]
    pub tag_name: Option<String>,
    /// TagIOI attribute
    #[serde(rename = "@TagIOI", default, skip_serializing_if = "Option::is_none")]
    pub tag_ioi: Option<String>,
    /// Action1FirstRegionID attribute
    #[serde(rename = "@Action1FirstRegionID", default, skip_serializing_if = "Option::is_none")]
    pub action1_first_region_id: Option<String>,
    /// Action2FirstRegionID attribute
    #[serde(rename = "@Action2FirstRegionID", default, skip_serializing_if = "Option::is_none")]
    pub action2_first_region_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Expression element
    #[serde(rename = "Expression", default, skip_serializing_if = "Option::is_none")]
    pub expression: Option<EmbeddedLanguageBlock>,
}

/// QuickWatchTagAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct QuickWatchTagAdaptor {
    /// Specifier attribute
    #[serde(rename = "@Specifier", default)]
    pub specifier: String,
    /// Scope attribute
    #[serde(rename = "@Scope", default)]
    pub scope: String,
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// DataLogTagCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DataLogTagCollection {
    /// Use attribute
    #[serde(rename = "@Use", default, skip_serializing_if = "Option::is_none")]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default, skip_serializing_if = "Option::is_none")]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// DataLogTag element
    #[serde(rename = "DataLogTag", default, skip_serializing_if = "Vec::is_empty")]
    pub data_log_tag: Vec<DataLogTag>,
}

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

/// LocalizedCommentWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LocalizedCommentWide {
    /// Lang attribute
    #[serde(rename = "@Lang", default, skip_serializing_if = "Option::is_none")]
    pub lang: Option<String>,
    /// Value element
    #[serde(rename = "Value", default, skip_serializing_if = "Vec::is_empty")]
    pub value: Vec<String>,
    /// DataValue element
    #[serde(rename = "DataValue", default, skip_serializing_if = "Vec::is_empty")]
    pub data_value: Vec<DataValue>,
    /// Array element
    #[serde(rename = "Array", default, skip_serializing_if = "Vec::is_empty")]
    pub array: Vec<Box<DataArray>>,
    /// Structure element
    #[serde(rename = "Structure", default, skip_serializing_if = "Vec::is_empty")]
    pub structure: Vec<Box<DataStructure>>,
    /// Text content
    #[serde(rename = "$text", default, skip_serializing_if = "Option::is_none")]
    pub text: Option<String>,
}

