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

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

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

/// ControllerType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Controller {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// ProcessorType attribute
    #[serde(rename = "@ProcessorType", default)]
    pub processor_type: Option<String>,
    /// MajorRev attribute
    #[serde(rename = "@MajorRev", default)]
    pub major_rev: Option<String>,
    /// MinorRev attribute
    #[serde(rename = "@MinorRev", default)]
    pub minor_rev: Option<String>,
    /// TimeSlice attribute
    #[serde(rename = "@TimeSlice", default)]
    pub time_slice: Option<String>,
    /// ShareUnusedTimeSlice attribute
    #[serde(rename = "@ShareUnusedTimeSlice", default)]
    pub share_unused_time_slice: Option<String>,
    /// PowerLossProgram attribute
    #[serde(rename = "@PowerLossProgram", default)]
    pub power_loss_program: Option<String>,
    /// PowerLossProgramUId attribute
    #[serde(rename = "@PowerLossProgramUId", default)]
    pub power_loss_program_uid: Option<String>,
    /// MajorFaultProgram attribute
    #[serde(rename = "@MajorFaultProgram", default)]
    pub major_fault_program: Option<String>,
    /// MajorFaultProgramUId attribute
    #[serde(rename = "@MajorFaultProgramUId", default)]
    pub major_fault_program_uid: Option<String>,
    /// ProjectCreationDate attribute
    #[serde(rename = "@ProjectCreationDate", default)]
    pub project_creation_date: Option<String>,
    /// LastModifiedDate attribute
    #[serde(rename = "@LastModifiedDate", default)]
    pub last_modified_date: Option<String>,
    /// SFCExecutionControl attribute
    #[serde(rename = "@SFCExecutionControl", default)]
    pub sfcexecution_control: Option<String>,
    /// SFCRestartPosition attribute
    #[serde(rename = "@SFCRestartPosition", default)]
    pub sfcrestart_position: Option<String>,
    /// SFCLastScan attribute
    #[serde(rename = "@SFCLastScan", default)]
    pub sfclast_scan: Option<String>,
    /// CommDriver attribute
    #[serde(rename = "@CommDriver", default)]
    pub comm_driver: Option<String>,
    /// CommPath attribute
    #[serde(rename = "@CommPath", default)]
    pub comm_path: Option<String>,
    /// ProjectSN attribute
    #[serde(rename = "@ProjectSN", default)]
    pub project_sn: Option<String>,
    /// OnlineSN attribute
    #[serde(rename = "@OnlineSN", default)]
    pub online_sn: Option<String>,
    /// MatchProjectToController attribute
    #[serde(rename = "@MatchProjectToController", default)]
    pub match_project_to_controller: Option<String>,
    /// CanUseRPIFromProducer attribute
    #[serde(rename = "@CanUseRPIFromProducer", default)]
    pub can_use_rpifrom_producer: Option<String>,
    /// InhibitAutomaticFirmwareUpdate attribute
    #[serde(rename = "@InhibitAutomaticFirmwareUpdate", default)]
    pub inhibit_automatic_firmware_update: Option<String>,
    /// CurrentProjectLanguage attribute
    #[serde(rename = "@CurrentProjectLanguage", default)]
    pub current_project_language: Option<String>,
    /// DefaultProjectLanguage attribute
    #[serde(rename = "@DefaultProjectLanguage", default)]
    pub default_project_language: Option<String>,
    /// ControllerLanguage attribute
    #[serde(rename = "@ControllerLanguage", default)]
    pub controller_language: Option<String>,
    /// PassThroughConfiguration attribute
    #[serde(rename = "@PassThroughConfiguration", default)]
    pub pass_through_configuration: Option<String>,
    /// DownloadProjectDocumentationAndExtendedProperties attribute
    #[serde(rename = "@DownloadProjectDocumentationAndExtendedProperties", default)]
    pub download_project_documentation_and_extended_properties: Option<String>,
    /// DownloadProjectCustomProperties attribute
    #[serde(rename = "@DownloadProjectCustomProperties", default)]
    pub download_project_custom_properties: Option<String>,
    /// ReportMinorOverflow attribute
    #[serde(rename = "@ReportMinorOverflow", default)]
    pub report_minor_overflow: Option<String>,
    /// IOForcesEnabled attribute
    #[serde(rename = "@IOForcesEnabled", default)]
    pub ioforces_enabled: Option<String>,
    /// SFCForcesEnabled attribute
    #[serde(rename = "@SFCForcesEnabled", default)]
    pub sfcforces_enabled: Option<String>,
    /// RedundancyUId attribute
    #[serde(rename = "@RedundancyUId", default)]
    pub redundancy_uid: Option<String>,
    /// SafetyUId attribute
    #[serde(rename = "@SafetyUId", default)]
    pub safety_uid: Option<String>,
    /// DataTypesUId attribute
    #[serde(rename = "@DataTypesUId", default)]
    pub data_types_uid: Option<String>,
    /// ModulesUId attribute
    #[serde(rename = "@ModulesUId", default)]
    pub modules_uid: Option<String>,
    /// AddOnInstructionDefinitionsUId attribute
    #[serde(rename = "@AddOnInstructionDefinitionsUId", default)]
    pub add_on_instruction_definitions_uid: Option<String>,
    /// TagsUId attribute
    #[serde(rename = "@TagsUId", default)]
    pub tags_uid: Option<String>,
    /// ProgramsUId attribute
    #[serde(rename = "@ProgramsUId", default)]
    pub programs_uid: Option<String>,
    /// TasksUId attribute
    #[serde(rename = "@TasksUId", default)]
    pub tasks_uid: Option<String>,
    /// AxesUId attribute
    #[serde(rename = "@AxesUId", default)]
    pub axes_uid: Option<String>,
    /// CoordinateSystemsUId attribute
    #[serde(rename = "@CoordinateSystemsUId", default)]
    pub coordinate_systems_uid: Option<String>,
    /// MotionGroupsUId attribute
    #[serde(rename = "@MotionGroupsUId", default)]
    pub motion_groups_uid: Option<String>,
    /// CSTUId attribute
    #[serde(rename = "@CSTUId", default)]
    pub cstuid: Option<String>,
    /// WallClockTimeUId attribute
    #[serde(rename = "@WallClockTimeUId", default)]
    pub wall_clock_time_uid: Option<String>,
    /// TrendGroupCollectionUId attribute
    #[serde(rename = "@TrendGroupCollectionUId", default)]
    pub trend_group_collection_uid: Option<String>,
    /// DataLogCollectionUId attribute
    #[serde(rename = "@DataLogCollectionUId", default)]
    pub data_log_collection_uid: Option<String>,
    /// TimeSynchronizeUId attribute
    #[serde(rename = "@TimeSynchronizeUId", default)]
    pub time_synchronize_uid: Option<String>,
    /// FilePath attribute
    #[serde(rename = "@FilePath", default)]
    pub file_path: Option<String>,
    /// ProductCode attribute
    #[serde(rename = "@ProductCode", default)]
    pub product_code: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// ControllerEditsExist attribute
    #[serde(rename = "@ControllerEditsExist", default)]
    pub controller_edits_exist: Option<String>,
    /// PendingEditsExist attribute
    #[serde(rename = "@PendingEditsExist", default)]
    pub pending_edits_exist: Option<String>,
    /// ForcesExist attribute
    #[serde(rename = "@ForcesExist", default)]
    pub forces_exist: Option<String>,
    /// EditResource attribute
    #[serde(rename = "@EditResource", default)]
    pub edit_resource: Option<String>,
    /// Faulted attribute
    #[serde(rename = "@Faulted", default)]
    pub faulted: Option<String>,
    /// GeneralStatus attribute
    #[serde(rename = "@GeneralStatus", default)]
    pub general_status: Option<String>,
    /// IOMapLEDStatus attribute
    #[serde(rename = "@IOMapLEDStatus", default)]
    pub iomap_ledstatus: Option<String>,
    /// KeySwitchPosition attribute
    #[serde(rename = "@KeySwitchPosition", default)]
    pub key_switch_position: Option<String>,
    /// Mode attribute
    #[serde(rename = "@Mode", default)]
    pub mode: Option<String>,
    /// ConnectedState attribute
    #[serde(rename = "@ConnectedState", default)]
    pub connected_state: Option<String>,
    /// IsProjectDirty attribute
    #[serde(rename = "@IsProjectDirty", default)]
    pub is_project_dirty: Option<String>,
    /// IsProjectDirtyFromAnotherWorkstation attribute
    #[serde(rename = "@IsProjectDirtyFromAnotherWorkstation", default)]
    pub is_project_dirty_from_another_workstation: Option<String>,
    /// EtherNetIPMode attribute
    #[serde(rename = "@EtherNetIPMode", default)]
    pub ether_net_ipmode: Option<String>,
    /// InstructionUsageConfiguredAOIs attribute
    #[serde(rename = "@InstructionUsageConfiguredAOIs", default)]
    pub instruction_usage_configured_aois: Option<String>,
    /// InstructionUsageConfiguredInstructions attribute
    #[serde(rename = "@InstructionUsageConfiguredInstructions", default)]
    pub instruction_usage_configured_instructions: Option<String>,
    /// IsPlantPAxTaskingModelEnabled attribute
    #[serde(rename = "@IsPlantPAxTaskingModelEnabled", default)]
    pub is_plant_pax_tasking_model_enabled: Option<String>,
    /// AutoDiagsEnabled attribute
    #[serde(rename = "@AutoDiagsEnabled", default)]
    pub auto_diags_enabled: Option<String>,
    /// WebServerEnabled attribute
    #[serde(rename = "@WebServerEnabled", default)]
    pub web_server_enabled: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// RedundancyInfo element
    #[serde(rename = "RedundancyInfo", default)]
    pub redundancy_info: Option<RedundancyInfo>,
    /// Security element
    #[serde(rename = "Security", default)]
    pub security: Option<SecurityInfo>,
    /// SafetyInfo element
    #[serde(rename = "SafetyInfo", default)]
    pub safety_info: Option<SafetyInfo>,
    /// DataTypes element
    #[serde(rename = "DataTypes", default)]
    pub data_types: Option<DataTypeCollection>,
    /// DiagnosticMessages element
    #[serde(rename = "DiagnosticMessages", default)]
    pub diagnostic_messages: Option<DiagnosticsMessageCollection>,
    /// DeviceDiagnosticProfiles element
    #[serde(rename = "DeviceDiagnosticProfiles", default)]
    pub device_diagnostic_profiles: Option<DeviceDiagnosticProfileCollection>,
    /// Modules element
    #[serde(rename = "Modules", default)]
    pub modules: Option<MapDeviceCollection>,
    /// AddOnInstructionDefinitions element
    #[serde(rename = "AddOnInstructionDefinitions", default)]
    pub add_on_instruction_definitions: Option<UDIDefinitionCollection>,
    /// AlarmDefinitions element
    #[serde(rename = "AlarmDefinitions", default)]
    pub alarm_definitions: Option<AlarmDefinitionCollectionAdaptor>,
    /// Tags element
    #[serde(rename = "Tags", default)]
    pub tags: Option<TagCollection>,
    /// Programs element
    #[serde(rename = "Programs", default)]
    pub programs: Option<ProgramCollection>,
    /// Tasks element
    #[serde(rename = "Tasks", default)]
    pub tasks: Option<TaskCollection>,
    /// ParameterConnections element
    #[serde(rename = "ParameterConnections", default)]
    pub parameter_connections: Option<ParameterConnectionCollection>,
    /// CommPorts element
    #[serde(rename = "CommPorts", default)]
    pub comm_ports: Option<CommPortCollection>,
    /// CST element
    #[serde(rename = "CST", default)]
    pub cst: Option<CST>,
    /// WallClockTime element
    #[serde(rename = "WallClockTime", default)]
    pub wall_clock_time: Option<WallClockTime>,
    /// Trends element
    #[serde(rename = "Trends", default)]
    pub trends: Option<TrendGroupCollection>,
    /// DataLogs element
    #[serde(rename = "DataLogs", default)]
    pub data_logs: Option<DataLogCollection>,
    /// QuickWatchLists element
    #[serde(rename = "QuickWatchLists", default)]
    pub quick_watch_lists: Option<QuickWatchCollectionAdaptor>,
    /// TimeSynchronize element
    #[serde(rename = "TimeSynchronize", default)]
    pub time_synchronize: Option<TimeSynchronize>,
    /// InternetProtocol element
    #[serde(rename = "InternetProtocol", default)]
    pub internet_protocol: Option<TCPIP>,
    /// EthernetPorts element
    #[serde(rename = "EthernetPorts", default)]
    pub ethernet_ports: Option<EthernetLinkCollection>,
    /// EthernetNetwork element
    #[serde(rename = "EthernetNetwork", default)]
    pub ethernet_network: Option<DeviceLevelRing>,
}

/// Content variants for DescriptionType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum DescriptionContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedDescription element
    LocalizedDescription(DescriptionText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for DescriptionContent {
    fn default() -> Self { DescriptionContent::TextContent(String::new()) }
}

/// DescriptionType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Description {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<DescriptionContent>,
}

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

/// RedundancyInfoType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct RedundancyInfo {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Enabled attribute
    #[serde(rename = "@Enabled", default)]
    pub enabled: Option<String>,
    /// KeepTestEditsOnSwitchOver attribute
    #[serde(rename = "@KeepTestEditsOnSwitchOver", default)]
    pub keep_test_edits_on_switch_over: Option<String>,
    /// IOMemoryPadPercentage attribute
    #[serde(rename = "@IOMemoryPadPercentage", default)]
    pub iomemory_pad_percentage: Option<String>,
    /// DataTablePadPercentage attribute
    #[serde(rename = "@DataTablePadPercentage", default)]
    pub data_table_pad_percentage: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// SafetyInfoType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SafetyInfo {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// SafetySignature attribute
    #[serde(rename = "@SafetySignature", default)]
    pub safety_signature: Option<String>,
    /// SafetyLocked attribute
    #[serde(rename = "@SafetyLocked", default)]
    pub safety_locked: Option<String>,
    /// SafetyLockPassword attribute
    #[serde(rename = "@SafetyLockPassword", default)]
    pub safety_lock_password: Option<String>,
    /// SafetyUnlockPassword attribute
    #[serde(rename = "@SafetyUnlockPassword", default)]
    pub safety_unlock_password: Option<String>,
    /// SignatureRunModeProtect attribute
    #[serde(rename = "@SignatureRunModeProtect", default)]
    pub signature_run_mode_protect: Option<String>,
    /// ConfigureSafetyIOAlways attribute
    #[serde(rename = "@ConfigureSafetyIOAlways", default)]
    pub configure_safety_ioalways: Option<String>,
    /// SafetySigned attribute
    #[serde(rename = "@SafetySigned", default)]
    pub safety_signed: Option<String>,
    /// SafetyLevel attribute
    #[serde(rename = "@SafetyLevel", default)]
    pub safety_level: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// SafetyTaskFaultString element
    #[serde(rename = "SafetyTaskFaultString", default)]
    pub safety_task_fault_string: Option<String>,
    /// SafetyTagMap element
    #[serde(rename = "SafetyTagMap", default)]
    pub safety_tag_map: Option<SafetyInfoType_SafetyTagMap_Inline>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

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

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

/// DiagnosticsMessageAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DiagnosticsMessageAdaptor {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// Version attribute
    #[serde(rename = "@Version", default)]
    pub version: String,
    /// DisplayCode attribute
    #[serde(rename = "@DisplayCode", default)]
    pub display_code: String,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// DisplayText element
    #[serde(rename = "DisplayText", default)]
    pub display_text: Vec<DisplayText>,
}

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

/// MapDeviceCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct MapDeviceCollection {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Module element
    #[serde(rename = "Module", default)]
    pub module: Vec<MapDevice>,
}

/// MapDeviceType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct MapDevice {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// CatalogNumber attribute
    #[serde(rename = "@CatalogNumber", default)]
    pub catalog_number: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// ProductType attribute
    #[serde(rename = "@ProductType", default)]
    pub product_type: Option<String>,
    /// ProductCode attribute
    #[serde(rename = "@ProductCode", default)]
    pub product_code: Option<String>,
    /// Major attribute
    #[serde(rename = "@Major", default)]
    pub major: Option<String>,
    /// Minor attribute
    #[serde(rename = "@Minor", default)]
    pub minor: Option<String>,
    /// UserDefinedVendor attribute
    #[serde(rename = "@UserDefinedVendor", default)]
    pub user_defined_vendor: Option<String>,
    /// UserDefinedProductType attribute
    #[serde(rename = "@UserDefinedProductType", default)]
    pub user_defined_product_type: Option<String>,
    /// UserDefinedProductCode attribute
    #[serde(rename = "@UserDefinedProductCode", default)]
    pub user_defined_product_code: Option<String>,
    /// UserDefinedMajor attribute
    #[serde(rename = "@UserDefinedMajor", default)]
    pub user_defined_major: Option<String>,
    /// UserDefinedMinor attribute
    #[serde(rename = "@UserDefinedMinor", default)]
    pub user_defined_minor: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// ParentModule attribute
    #[serde(rename = "@ParentModule", default)]
    pub parent_module: Option<String>,
    /// ParentModuleUId attribute
    #[serde(rename = "@ParentModuleUId", default)]
    pub parent_module_uid: Option<String>,
    /// ParentModPortId attribute
    #[serde(rename = "@ParentModPortId", default)]
    pub parent_mod_port_id: Option<String>,
    /// Inhibited attribute
    #[serde(rename = "@Inhibited", default)]
    pub inhibited: Option<String>,
    /// MajorFault attribute
    #[serde(rename = "@MajorFault", default)]
    pub major_fault: Option<String>,
    /// DriverType attribute
    #[serde(rename = "@DriverType", default)]
    pub driver_type: Option<String>,
    /// Throttle attribute
    #[serde(rename = "@Throttle", default)]
    pub throttle: Option<String>,
    /// ControlNetSignature attribute
    #[serde(rename = "@ControlNetSignature", default)]
    pub control_net_signature: Option<String>,
    /// SafetyNetwork attribute
    #[serde(rename = "@SafetyNetwork", default)]
    pub safety_network: Option<String>,
    /// ConfigRevSupported attribute
    #[serde(rename = "@ConfigRevSupported", default)]
    pub config_rev_supported: Option<String>,
    /// BumplessReconfigSupported attribute
    #[serde(rename = "@BumplessReconfigSupported", default)]
    pub bumpless_reconfig_supported: Option<String>,
    /// IncludePortSegment attribute
    #[serde(rename = "@IncludePortSegment", default)]
    pub include_port_segment: Option<String>,
    /// IncludeKeySegment attribute
    #[serde(rename = "@IncludeKeySegment", default)]
    pub include_key_segment: Option<String>,
    /// ShutdownParentOnFault attribute
    #[serde(rename = "@ShutdownParentOnFault", default)]
    pub shutdown_parent_on_fault: Option<String>,
    /// DrivesADCMode attribute
    #[serde(rename = "@DrivesADCMode", default)]
    pub drives_adcmode: Option<String>,
    /// DrivesADCEnabled attribute
    #[serde(rename = "@DrivesADCEnabled", default)]
    pub drives_adcenabled: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// FaultCode attribute
    #[serde(rename = "@FaultCode", default)]
    pub fault_code: Option<String>,
    /// FaultInfo attribute
    #[serde(rename = "@FaultInfo", default)]
    pub fault_info: Option<String>,
    /// Status attribute
    #[serde(rename = "@Status", default)]
    pub status: Option<String>,
    /// StatusString attribute
    #[serde(rename = "@StatusString", default)]
    pub status_string: Option<String>,
    /// UserDefinedCatalogNumber attribute
    #[serde(rename = "@UserDefinedCatalogNumber", default)]
    pub user_defined_catalog_number: Option<String>,
    /// SafetyEnabled attribute
    #[serde(rename = "@SafetyEnabled", default)]
    pub safety_enabled: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default)]
    pub tracking_groups: Option<String>,
    /// ImportCreateMode attribute
    #[serde(rename = "@ImportCreateMode", default)]
    pub import_create_mode: Option<String>,
    /// AutoDiagsEnabled  attribute
    #[serde(rename = "@AutoDiagsEnabled ", default)]
    pub auto_diags_enabled : Option<String>,
    /// DiagnosticProfileID attribute
    #[serde(rename = "@DiagnosticProfileID", default)]
    pub diagnostic_profile_id: Option<String>,
    /// DuplexEnabled attribute
    #[serde(rename = "@DuplexEnabled", default)]
    pub duplex_enabled: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// FaultString element
    #[serde(rename = "FaultString", default)]
    pub fault_string: Option<String>,
    /// EKey element
    #[serde(rename = "EKey", default)]
    pub ekey: Option<ModuleEKey>,
    /// Ports element
    #[serde(rename = "Ports", default)]
    pub ports: Option<PortCollection>,
    /// Communications element
    #[serde(rename = "Communications", default)]
    pub communications: Option<Communications>,
    /// ExtendedProperties element
    #[serde(rename = "ExtendedProperties", default)]
    pub extended_properties: Option<MapDeviceType_ExtendedProperties_Inline>,
    /// PingMethod element
    #[serde(rename = "PingMethod", default)]
    pub ping_method: Option<PingMethod>,
    /// SiblingDependencies element
    #[serde(rename = "SiblingDependencies", default)]
    pub sibling_dependencies: Option<SiblingDependenciesCollection>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

/// MapDeviceType_ExtendedProperties_InlineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct MapDeviceType_ExtendedProperties_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>,
}

/// ModuleEKeyType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ModuleEKey {
    /// State attribute
    #[serde(rename = "@State", default)]
    pub state: String,
    /// Relaxed attribute
    #[serde(rename = "@Relaxed", default)]
    pub relaxed: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// ProductCode attribute
    #[serde(rename = "@ProductCode", default)]
    pub product_code: Option<String>,
    /// ProductType attribute
    #[serde(rename = "@ProductType", default)]
    pub product_type: Option<String>,
    /// Major attribute
    #[serde(rename = "@Major", default)]
    pub major: Option<String>,
    /// Minor attribute
    #[serde(rename = "@Minor", default)]
    pub minor: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// ABusType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ABus {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Size attribute
    #[serde(rename = "@Size", default)]
    pub size: Option<String>,
    /// Baud attribute
    #[serde(rename = "@Baud", default)]
    pub baud: Option<String>,
    /// AddressMask attribute
    #[serde(rename = "@AddressMask", default)]
    pub address_mask: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// CommunicationsType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Communications {
    /// CommMethod attribute
    #[serde(rename = "@CommMethod", default)]
    pub comm_method: Option<String>,
    /// ConfigTagUId attribute
    #[serde(rename = "@ConfigTagUId", default)]
    pub config_tag_uid: Option<String>,
    /// PrimCxnInputSize attribute
    #[serde(rename = "@PrimCxnInputSize", default)]
    pub prim_cxn_input_size: Option<String>,
    /// PrimCxnOutputSize attribute
    #[serde(rename = "@PrimCxnOutputSize", default)]
    pub prim_cxn_output_size: Option<String>,
    /// SecCxnInputSize attribute
    #[serde(rename = "@SecCxnInputSize", default)]
    pub sec_cxn_input_size: Option<String>,
    /// SecCxnOutputSize attribute
    #[serde(rename = "@SecCxnOutputSize", default)]
    pub sec_cxn_output_size: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// ConfigData element
    #[serde(rename = "ConfigData", default)]
    pub config_data: Option<ConfigData>,
    /// ConfigTag element
    #[serde(rename = "ConfigTag", default)]
    pub config_tag: Option<ConfigTag>,
    /// ConfigScript element
    #[serde(rename = "ConfigScript", default)]
    pub config_script: Option<ConfigScript>,
    /// SafetyScript element
    #[serde(rename = "SafetyScript", default)]
    pub safety_script: Option<SafetyScript>,
    /// Connections element
    #[serde(rename = "Connections", default)]
    pub connections: Option<MapConnectionCollection>,
}

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

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

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

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

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

/// UDIDefinitionCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UDIDefinitionCollection {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// EncodedData element
    #[serde(rename = "EncodedData", default)]
    pub encoded_data: Vec<EncodedUDIDefinition>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// AddOnInstructionDefinition element
    #[serde(rename = "AddOnInstructionDefinition", default)]
    pub add_on_instruction_definition: Vec<UDIDefinition>,
}

/// Content variants for UDIDefinitionType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum UDIDefinitionContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// Description element
    Description(Description),
    /// RevisionNote element
    RevisionNote(RevisionNote),
    /// SignatureHistory element
    SignatureHistory(SignatureHistory),
    /// AdditionalHelpText element
    AdditionalHelpText(AdditionalHelpText),
    /// EncryptionInfo element
    EncryptionInfo(EncryptionInfo),
    /// Parameters element
    Parameters(UDIParameterCollection),
    /// LocalTags element
    LocalTags(UDILocalTagCollection),
    /// Tags element
    Tags(TagCollection),
    /// Routines element
    Routines(RoutineCollection),
    /// Dependencies element
    Dependencies(DependenciesWide),
    /// EncryptedAOIContent element
    EncryptedAOIContent(UDIDefinitionType_EncryptedAOIContent_Inline),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for UDIDefinitionContent {
    fn default() -> Self { UDIDefinitionContent::TextContent(String::new()) }
}

/// UDIDefinitionType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UDIDefinition {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// Class attribute
    #[serde(rename = "@Class", default)]
    pub class: Option<String>,
    /// Revision attribute
    #[serde(rename = "@Revision", default)]
    pub revision: Option<String>,
    /// RevisionExtension attribute
    #[serde(rename = "@RevisionExtension", default)]
    pub revision_extension: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// ExecutePrescan attribute
    #[serde(rename = "@ExecutePrescan", default)]
    pub execute_prescan: Option<String>,
    /// ExecutePostscan attribute
    #[serde(rename = "@ExecutePostscan", default)]
    pub execute_postscan: Option<String>,
    /// ExecuteEnableInFalse attribute
    #[serde(rename = "@ExecuteEnableInFalse", default)]
    pub execute_enable_in_false: Option<String>,
    /// SignatureID attribute
    #[serde(rename = "@SignatureID", default)]
    pub signature_id: Option<String>,
    /// SignatureTimestamp attribute
    #[serde(rename = "@SignatureTimestamp", default)]
    pub signature_timestamp: Option<String>,
    /// SafetySignatureID attribute
    #[serde(rename = "@SafetySignatureID", default)]
    pub safety_signature_id: Option<String>,
    /// CreatedDate attribute
    #[serde(rename = "@CreatedDate", default)]
    pub created_date: Option<String>,
    /// CreatedBy attribute
    #[serde(rename = "@CreatedBy", default)]
    pub created_by: Option<String>,
    /// EditedDate attribute
    #[serde(rename = "@EditedDate", default)]
    pub edited_date: Option<String>,
    /// EditedBy attribute
    #[serde(rename = "@EditedBy", default)]
    pub edited_by: Option<String>,
    /// SoftwareRevision attribute
    #[serde(rename = "@SoftwareRevision", default)]
    pub software_revision: Option<String>,
    /// OriginalLibrary attribute
    #[serde(rename = "@OriginalLibrary", default)]
    pub original_library: Option<String>,
    /// OriginalName attribute
    #[serde(rename = "@OriginalName", default)]
    pub original_name: Option<String>,
    /// OriginalRevision attribute
    #[serde(rename = "@OriginalRevision", default)]
    pub original_revision: Option<String>,
    /// OriginalVendor attribute
    #[serde(rename = "@OriginalVendor", default)]
    pub original_vendor: Option<String>,
    /// AddedToProject attribute
    #[serde(rename = "@AddedToProject", default)]
    pub added_to_project: Option<String>,
    /// SourceKey attribute
    #[serde(rename = "@SourceKey", default)]
    pub source_key: Option<String>,
    /// EncodedSourceKey attribute
    #[serde(rename = "@EncodedSourceKey", default)]
    pub encoded_source_key: Option<String>,
    /// SourceProtectionType attribute
    #[serde(rename = "@SourceProtectionType", default)]
    pub source_protection_type: Option<String>,
    /// IsEncrypted attribute
    #[serde(rename = "@IsEncrypted", default)]
    pub is_encrypted: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default)]
    pub tracking_groups: Option<String>,
    /// LogicHash attribute
    #[serde(rename = "@LogicHash", default)]
    pub logic_hash: Option<String>,
    /// DescriptionHash attribute
    #[serde(rename = "@DescriptionHash", default)]
    pub description_hash: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<UDIDefinitionContent>,
}

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

/// Content variants for EncodedUDIDefinitionType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum EncodedUDIDefinitionContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// Description element
    Description(Description),
    /// RevisionNote element
    RevisionNote(RevisionNote),
    /// SignatureHistory element
    SignatureHistory(SignatureHistory),
    /// AdditionalHelpText element
    AdditionalHelpText(AdditionalHelpText),
    /// Parameters element
    Parameters(UDIParameterCollection),
    /// Dependencies element
    Dependencies(DependenciesWide),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for EncodedUDIDefinitionContent {
    fn default() -> Self { EncodedUDIDefinitionContent::TextContent(String::new()) }
}

/// EncodedUDIDefinitionType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EncodedUDIDefinition {
    /// EncodedType attribute
    #[serde(rename = "@EncodedType", default)]
    pub encoded_type: Option<String>,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Class attribute
    #[serde(rename = "@Class", default)]
    pub class: Option<String>,
    /// Revision attribute
    #[serde(rename = "@Revision", default)]
    pub revision: Option<String>,
    /// RevisionExtension attribute
    #[serde(rename = "@RevisionExtension", default)]
    pub revision_extension: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// SignatureID attribute
    #[serde(rename = "@SignatureID", default)]
    pub signature_id: Option<String>,
    /// SignatureTimestamp attribute
    #[serde(rename = "@SignatureTimestamp", default)]
    pub signature_timestamp: Option<String>,
    /// SafetySignatureID attribute
    #[serde(rename = "@SafetySignatureID", default)]
    pub safety_signature_id: Option<String>,
    /// EditedDate attribute
    #[serde(rename = "@EditedDate", default)]
    pub edited_date: Option<String>,
    /// SoftwareRevision attribute
    #[serde(rename = "@SoftwareRevision", default)]
    pub software_revision: Option<String>,
    /// OriginalLibrary attribute
    #[serde(rename = "@OriginalLibrary", default)]
    pub original_library: Option<String>,
    /// OriginalName attribute
    #[serde(rename = "@OriginalName", default)]
    pub original_name: Option<String>,
    /// OriginalRevision attribute
    #[serde(rename = "@OriginalRevision", default)]
    pub original_revision: Option<String>,
    /// OriginalVendor attribute
    #[serde(rename = "@OriginalVendor", default)]
    pub original_vendor: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: Option<String>,
    /// EncryptionConfig attribute
    #[serde(rename = "@EncryptionConfig", default)]
    pub encryption_config: Option<String>,
    /// IsEncrypted attribute
    #[serde(rename = "@IsEncrypted", default)]
    pub is_encrypted: Option<String>,
    /// LogicHash attribute
    #[serde(rename = "@LogicHash", default)]
    pub logic_hash: Option<String>,
    /// DescriptionHash attribute
    #[serde(rename = "@DescriptionHash", default)]
    pub description_hash: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<EncodedUDIDefinitionContent>,
}

/// Content variants for RevisionNoteType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum RevisionNoteContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedRevisionNote element
    LocalizedRevisionNote(RevisionNoteText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for RevisionNoteContent {
    fn default() -> Self { RevisionNoteContent::TextContent(String::new()) }
}

/// RevisionNoteType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct RevisionNote {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<RevisionNoteContent>,
}

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

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

/// HistoryEntryType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct HistoryEntry {
    /// User attribute
    #[serde(rename = "@User", default)]
    pub user: String,
    /// Timestamp attribute
    #[serde(rename = "@Timestamp", default)]
    pub timestamp: String,
    /// SignatureID attribute
    #[serde(rename = "@SignatureID", default)]
    pub signature_id: String,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

/// Content variants for AdditionalHelpTextType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum AdditionalHelpTextContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedAdditionalHelpText element
    LocalizedAdditionalHelpText(LocalizedAdditionalHelpText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for AdditionalHelpTextContent {
    fn default() -> Self { AdditionalHelpTextContent::TextContent(String::new()) }
}

/// AdditionalHelpTextType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AdditionalHelpText {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<AdditionalHelpTextContent>,
}

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

/// UDIParameterType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct UDIParameter {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// TagType attribute
    #[serde(rename = "@TagType", default)]
    pub tag_type: Option<String>,
    /// DataType attribute
    #[serde(rename = "@DataType", default)]
    pub data_type: Option<String>,
    /// DataTypeUId attribute
    #[serde(rename = "@DataTypeUId", default)]
    pub data_type_uid: Option<String>,
    /// Dimensions attribute
    #[serde(rename = "@Dimensions", default)]
    pub dimensions: Option<String>,
    /// Usage attribute
    #[serde(rename = "@Usage", default)]
    pub usage: String,
    /// Radix attribute
    #[serde(rename = "@Radix", default)]
    pub radix: Option<String>,
    /// AliasFor attribute
    #[serde(rename = "@AliasFor", default)]
    pub alias_for: Option<String>,
    /// AliasBase attribute
    #[serde(rename = "@AliasBase", default)]
    pub alias_base: Option<String>,
    /// Required attribute
    #[serde(rename = "@Required", default)]
    pub required: Option<String>,
    /// Visible attribute
    #[serde(rename = "@Visible", default)]
    pub visible: Option<String>,
    /// Constant attribute
    #[serde(rename = "@Constant", default)]
    pub constant: Option<String>,
    /// ExternalAccess attribute
    #[serde(rename = "@ExternalAccess", default)]
    pub external_access: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default)]
    pub max: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default)]
    pub min: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// CanBeNull attribute
    #[serde(rename = "@CanBeNull", default)]
    pub can_be_null: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// Comments element
    #[serde(rename = "Comments", default)]
    pub comments: Option<CommentCollection>,
    /// EngineeringUnits element
    #[serde(rename = "EngineeringUnits", default)]
    pub engineering_units: Option<EngineeringUnitCollection>,
    /// Maxes element
    #[serde(rename = "Maxes", default)]
    pub maxes: Option<MaxLimitCollection>,
    /// Mins element
    #[serde(rename = "Mins", default)]
    pub mins: Option<MinLimitCollection>,
    /// State0s element
    #[serde(rename = "State0s", default)]
    pub state0s: Option<State0Collection>,
    /// State1s element
    #[serde(rename = "State1s", default)]
    pub state1s: Option<State1Collection>,
    /// DefaultData element
    #[serde(rename = "DefaultData", default)]
    pub default_data: Vec<DefaultDataWide>,
}

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

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

/// MemberAlarmDefinitionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct MemberAlarmDefinition {
    /// AckRequired attribute
    #[serde(rename = "@AckRequired", default)]
    pub ack_required: Option<String>,
    /// Latched attribute
    #[serde(rename = "@Latched", default)]
    pub latched: Option<String>,
    /// Required attribute
    #[serde(rename = "@Required", default)]
    pub required: Option<String>,
    /// AlarmSetOperIncluded attribute
    #[serde(rename = "@AlarmSetOperIncluded", default)]
    pub alarm_set_oper_included: Option<String>,
    /// AlarmSetRollupIncluded attribute
    #[serde(rename = "@AlarmSetRollupIncluded", default)]
    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)]
    pub condition_type: Option<String>,
    /// Limit attribute
    #[serde(rename = "@Limit", default)]
    pub limit: Option<String>,
    /// Severity attribute
    #[serde(rename = "@Severity", default)]
    pub severity: Option<String>,
    /// OnDelay attribute
    #[serde(rename = "@OnDelay", default)]
    pub on_delay: Option<String>,
    /// OffDelay attribute
    #[serde(rename = "@OffDelay", default)]
    pub off_delay: Option<String>,
    /// ShelveDuration attribute
    #[serde(rename = "@ShelveDuration", default)]
    pub shelve_duration: Option<String>,
    /// MaxShelveDuration attribute
    #[serde(rename = "@MaxShelveDuration", default)]
    pub max_shelve_duration: Option<String>,
    /// Deadband attribute
    #[serde(rename = "@Deadband", default)]
    pub deadband: Option<String>,
    /// EvaluationPeriod attribute
    #[serde(rename = "@EvaluationPeriod", default)]
    pub evaluation_period: Option<String>,
    /// Expression attribute
    #[serde(rename = "@Expression", default)]
    pub expression: Option<String>,
    /// TargetTag attribute
    #[serde(rename = "@TargetTag", default)]
    pub target_tag: Option<String>,
    /// AssocTag1 attribute
    #[serde(rename = "@AssocTag1", default)]
    pub assoc_tag1: Option<String>,
    /// AssocTag2 attribute
    #[serde(rename = "@AssocTag2", default)]
    pub assoc_tag2: Option<String>,
    /// AssocTag3 attribute
    #[serde(rename = "@AssocTag3", default)]
    pub assoc_tag3: Option<String>,
    /// AssocTag4 attribute
    #[serde(rename = "@AssocTag4", default)]
    pub assoc_tag4: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// IsTemplate  attribute
    #[serde(rename = "@IsTemplate ", default)]
    pub is_template : Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// AlarmConfig element
    #[serde(rename = "AlarmConfig", default)]
    pub alarm_config: Option<AlarmConfig>,
}

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

/// Content variants for CommentAdaptorType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum CommentAdaptorContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedComment element
    LocalizedComment(LocalizedCommentWide),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for CommentAdaptorContent {
    fn default() -> Self { CommentAdaptorContent::TextContent(String::new()) }
}

/// CommentAdaptorType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CommentAdaptor {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: String,
    /// Unused attribute
    #[serde(rename = "@Unused", default)]
    pub unused: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<CommentAdaptorContent>,
}

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

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

/// Content variants for EngineeringUnitType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum EngineeringUnitContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedEngineeringUnit element
    LocalizedEngineeringUnit(EngineeringUnitText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for EngineeringUnitContent {
    fn default() -> Self { EngineeringUnitContent::TextContent(String::new()) }
}

/// EngineeringUnitType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EngineeringUnit {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<EngineeringUnitContent>,
}

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

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

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

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

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

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

/// Content variants for State0Type mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum State0Content {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedState0 element
    LocalizedState0(State0Text),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for State0Content {
    fn default() -> Self { State0Content::TextContent(String::new()) }
}

/// State0Type element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct State0 {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<State0Content>,
}

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

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

/// Content variants for State1Type mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum State1Content {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedState1 element
    LocalizedState1(State1Text),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for State1Content {
    fn default() -> Self { State1Content::TextContent(String::new()) }
}

/// State1Type element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct State1 {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<State1Content>,
}

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

/// CustomPropertiesCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CustomPropertiesCollection {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Provider element
    #[serde(rename = "Provider", default)]
    pub provider: Vec<CustomPropertiesAdaptor>,
}

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

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

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

/// Content variants for PrimaryActionSetAdaptorType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum PrimaryActionSetAdaptorContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedPrimaryActionSet element
    LocalizedPrimaryActionSet(PrimaryActionSetText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for PrimaryActionSetAdaptorContent {
    fn default() -> Self { PrimaryActionSetAdaptorContent::TextContent(String::new()) }
}

/// PrimaryActionSetAdaptorType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct PrimaryActionSetAdaptor {
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: String,
    /// IsPermissionSet attribute
    #[serde(rename = "@IsPermissionSet", default)]
    pub is_permission_set: String,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<PrimaryActionSetAdaptorContent>,
}

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

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

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

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

/// Content variants for LabelAdaptorType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum LabelAdaptorContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedLabel element
    LocalizedLabel(LabelText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for LabelAdaptorContent {
    fn default() -> Self { LabelAdaptorContent::TextContent(String::new()) }
}

/// LabelAdaptorType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LabelAdaptor {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<LabelAdaptorContent>,
}

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

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

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

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

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

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

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

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

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

/// ProgramCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ProgramCollection {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Program element
    #[serde(rename = "Program", default)]
    pub program: Vec<AProgram>,
}

/// RoutineCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct RoutineCollection {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// EncodedData element
    #[serde(rename = "EncodedData", default)]
    pub encoded_data: Vec<EncodedRoutine>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Vec<CustomPropertiesCollection>,
    /// Routine element
    #[serde(rename = "Routine", default)]
    pub routine: Vec<Routine>,
}

/// Content variants for RoutineType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum RoutineContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// Description element
    Description(Description),
    /// EncryptionInfo element
    EncryptionInfo(EncryptionInfo),
    /// RLLContent element
    RLLContent(RungCollection),
    /// FBDContent element
    FBDContent(FBDContent),
    /// SFCContent element
    SFCContent(SFCContent),
    /// STContent element
    STContent(STContent),
    /// ExternalContent element
    ExternalContent(ExternalContent),
    /// SEQContent element
    SEQContent(SEQContent),
    /// EncryptedContent element
    EncryptedContent(EncryptedContent),
    /// EncryptedSegments element
    EncryptedSegments(RoutineType_EncryptedSegments_Inline),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for RoutineContent {
    fn default() -> Self { RoutineContent::TextContent(String::new()) }
}

/// RoutineType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Routine {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Type attribute
    #[serde(rename = "@Type", default)]
    pub r#type: String,
    /// SourceKey attribute
    #[serde(rename = "@SourceKey", default)]
    pub source_key: Option<String>,
    /// EncodedSourceKey attribute
    #[serde(rename = "@EncodedSourceKey", default)]
    pub encoded_source_key: Option<String>,
    /// SourceProtectionType attribute
    #[serde(rename = "@SourceProtectionType", default)]
    pub source_protection_type: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// ParentUId attribute
    #[serde(rename = "@ParentUId", default)]
    pub parent_uid: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// TrackingGroups attribute
    #[serde(rename = "@TrackingGroups", default)]
    pub tracking_groups: Option<String>,
    /// LogicHash attribute
    #[serde(rename = "@LogicHash", default)]
    pub logic_hash: Option<String>,
    /// DescriptionHash attribute
    #[serde(rename = "@DescriptionHash", default)]
    pub description_hash: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<RoutineContent>,
}

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

/// EncodedRoutineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EncodedRoutine {
    /// EncodedType attribute
    #[serde(rename = "@EncodedType", default)]
    pub encoded_type: Option<String>,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Type attribute
    #[serde(rename = "@Type", default)]
    pub r#type: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: Option<String>,
    /// EncryptionConfig attribute
    #[serde(rename = "@EncryptionConfig", default)]
    pub encryption_config: Option<String>,
    /// LogicHash attribute
    #[serde(rename = "@LogicHash", default)]
    pub logic_hash: Option<String>,
    /// DescriptionHash attribute
    #[serde(rename = "@DescriptionHash", default)]
    pub description_hash: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

/// LabelCollectionType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LabelCollection {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Label element
    #[serde(rename = "Label", default)]
    pub label: Vec<LabelWide>,
}

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

/// FBDContentType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBDContent {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Start attribute
    #[serde(rename = "@Start", default)]
    pub start: Option<String>,
    /// Count attribute
    #[serde(rename = "@Count", default)]
    pub count: Option<String>,
    /// SheetSize attribute
    #[serde(rename = "@SheetSize", default)]
    pub sheet_size: Option<String>,
    /// SheetOrientation attribute
    #[serde(rename = "@SheetOrientation", default)]
    pub sheet_orientation: Option<String>,
    /// OnlineEditType attribute
    #[serde(rename = "@OnlineEditType", default)]
    pub online_edit_type: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Sheet element
    #[serde(rename = "Sheet", default)]
    pub sheet: Vec<Sheet>,
}

/// Content variants for SheetType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum SheetContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// Description element
    Description(Description),
    /// LanguageElements element
    LanguageElements(String),
    /// IRef element
    IRef(FBD_InputRef),
    /// ORef element
    ORef(FBD_OutputRef),
    /// ICon element
    ICon(FBD_InputWireConnector),
    /// OCon element
    OCon(FBD_OutputWireConnector),
    /// Block element
    Block(AFBD_Block),
    /// Function element
    Function(AFBD_Function),
    /// AddOnInstruction element
    AddOnInstruction(FBD_UDIBlock),
    /// GSV element
    GSV(FBD_GsvBlock),
    /// SSV element
    SSV(FBD_SsvBlock),
    /// JSR element
    JSR(FBD_JSR),
    /// SBR element
    SBR(FBD_SBR),
    /// RET element
    RET(FBD_RET),
    /// Wire element
    Wire(FBD_Wire),
    /// FeedbackWire element
    FeedbackWire(FBD_FeedbackWire),
    /// TextBox element
    TextBox(TextBox),
    /// Attachment element
    Attachment(AAttachment),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for SheetContent {
    fn default() -> Self { SheetContent::TextContent(String::new()) }
}

/// SheetType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Sheet {
    /// Number attribute
    #[serde(rename = "@Number", default)]
    pub number: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<SheetContent>,
}

/// FBD_InputRefType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_InputRef {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// OperandIOI attribute
    #[serde(rename = "@OperandIOI", default)]
    pub operand_ioi: Option<String>,
    /// OperandIOINTT attribute
    #[serde(rename = "@OperandIOINTT", default)]
    pub operand_iointt: Option<String>,
    /// HideDesc attribute
    #[serde(rename = "@HideDesc", default)]
    pub hide_desc: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// LatchedTagIOI attribute
    #[serde(rename = "@LatchedTagIOI", default)]
    pub latched_tag_ioi: Option<String>,
    /// LatchedTagIOINTT attribute
    #[serde(rename = "@LatchedTagIOINTT", default)]
    pub latched_tag_iointt: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_OutputRefType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_OutputRef {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// OperandIOI attribute
    #[serde(rename = "@OperandIOI", default)]
    pub operand_ioi: Option<String>,
    /// OperandIOINTT attribute
    #[serde(rename = "@OperandIOINTT", default)]
    pub operand_iointt: Option<String>,
    /// HideDesc attribute
    #[serde(rename = "@HideDesc", default)]
    pub hide_desc: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_InputWireConnectorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_InputWireConnector {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_OutputWireConnectorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_OutputWireConnector {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_UDIBlockType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_UDIBlock {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// OperandIOI attribute
    #[serde(rename = "@OperandIOI", default)]
    pub operand_ioi: Option<String>,
    /// OperandIOINTT attribute
    #[serde(rename = "@OperandIOINTT", default)]
    pub operand_iointt: Option<String>,
    /// VisiblePins attribute
    #[serde(rename = "@VisiblePins", default)]
    pub visible_pins: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// InOutParameter element
    #[serde(rename = "InOutParameter", default)]
    pub in_out_parameter: Vec<FBD_UDIArgument>,
}

/// FBD_UDIArgumentType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_UDIArgument {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Argument attribute
    #[serde(rename = "@Argument", default)]
    pub argument: Option<String>,
    /// ArgumentIOI attribute
    #[serde(rename = "@ArgumentIOI", default)]
    pub argument_ioi: Option<String>,
    /// ArgumentIOINTT attribute
    #[serde(rename = "@ArgumentIOINTT", default)]
    pub argument_iointt: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_SpecialArrayType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_SpecialArray {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// OperandIOI attribute
    #[serde(rename = "@OperandIOI", default)]
    pub operand_ioi: Option<String>,
    /// OperandIOINTT attribute
    #[serde(rename = "@OperandIOINTT", default)]
    pub operand_iointt: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_GsvBlockType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_GsvBlock {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Object attribute
    #[serde(rename = "@Object", default)]
    pub object: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_SsvBlockType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_SsvBlock {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Object attribute
    #[serde(rename = "@Object", default)]
    pub object: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_JSRType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_JSR {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Routine attribute
    #[serde(rename = "@Routine", default)]
    pub routine: Option<String>,
    /// RoutineIOI attribute
    #[serde(rename = "@RoutineIOI", default)]
    pub routine_ioi: Option<String>,
    /// RoutineIOINTT attribute
    #[serde(rename = "@RoutineIOINTT", default)]
    pub routine_iointt: Option<String>,
    /// In attribute
    #[serde(rename = "@In", default)]
    pub r#in: Option<String>,
    /// InIOI attribute
    #[serde(rename = "@InIOI", default)]
    pub in_ioi: Option<String>,
    /// InIOINTT attribute
    #[serde(rename = "@InIOINTT", default)]
    pub in_iointt: Option<String>,
    /// Ret attribute
    #[serde(rename = "@Ret", default)]
    pub ret: Option<String>,
    /// RetIOI attribute
    #[serde(rename = "@RetIOI", default)]
    pub ret_ioi: Option<String>,
    /// RetIOINTT attribute
    #[serde(rename = "@RetIOINTT", default)]
    pub ret_iointt: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_SBRType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_SBR {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Ret attribute
    #[serde(rename = "@Ret", default)]
    pub ret: Option<String>,
    /// RetIOI attribute
    #[serde(rename = "@RetIOI", default)]
    pub ret_ioi: Option<String>,
    /// RetIOINTT attribute
    #[serde(rename = "@RetIOINTT", default)]
    pub ret_iointt: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_RETType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_RET {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// In attribute
    #[serde(rename = "@In", default)]
    pub r#in: Option<String>,
    /// InIOI attribute
    #[serde(rename = "@InIOI", default)]
    pub in_ioi: Option<String>,
    /// InIOINTT attribute
    #[serde(rename = "@InIOINTT", default)]
    pub in_iointt: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// RegionId attribute
    #[serde(rename = "@RegionId", default)]
    pub region_id: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_WireType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_Wire {
    /// FromID attribute
    #[serde(rename = "@FromID", default)]
    pub from_id: String,
    /// FromParam attribute
    #[serde(rename = "@FromParam", default)]
    pub from_param: Option<String>,
    /// ToID attribute
    #[serde(rename = "@ToID", default)]
    pub to_id: String,
    /// ToParam attribute
    #[serde(rename = "@ToParam", default)]
    pub to_param: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// FBD_FeedbackWireType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FBD_FeedbackWire {
    /// FromID attribute
    #[serde(rename = "@FromID", default)]
    pub from_id: String,
    /// FromParam attribute
    #[serde(rename = "@FromParam", default)]
    pub from_param: Option<String>,
    /// ToID attribute
    #[serde(rename = "@ToID", default)]
    pub to_id: String,
    /// ToParam attribute
    #[serde(rename = "@ToParam", default)]
    pub to_param: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// Content variants for TextBoxType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum TextBoxContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// Text element
    Text(TextWide),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for TextBoxContent {
    fn default() -> Self { TextBoxContent::TextContent(String::new()) }
}

/// TextBoxType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TextBox {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// Width attribute
    #[serde(rename = "@Width", default)]
    pub width: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<TextBoxContent>,
}

/// Content variants for TextBoxAdaptorType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum TextBoxAdaptorContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// LocalizedText element
    LocalizedText(TextBoxAdaptorText),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for TextBoxAdaptorContent {
    fn default() -> Self { TextBoxAdaptorContent::TextContent(String::new()) }
}

/// TextBoxAdaptorType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TextBoxAdaptor {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<TextBoxAdaptorContent>,
}

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

/// SFCContentType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SFCContent {
    /// SheetSize attribute
    #[serde(rename = "@SheetSize", default)]
    pub sheet_size: Option<String>,
    /// SheetOrientation attribute
    #[serde(rename = "@SheetOrientation", default)]
    pub sheet_orientation: Option<String>,
    /// StepName attribute
    #[serde(rename = "@StepName", default)]
    pub step_name: Option<String>,
    /// TransitionName attribute
    #[serde(rename = "@TransitionName", default)]
    pub transition_name: Option<String>,
    /// ActionName attribute
    #[serde(rename = "@ActionName", default)]
    pub action_name: Option<String>,
    /// StopName attribute
    #[serde(rename = "@StopName", default)]
    pub stop_name: Option<String>,
    /// OnlineEditType attribute
    #[serde(rename = "@OnlineEditType", default)]
    pub online_edit_type: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// LanguageElements element
    #[serde(rename = "LanguageElements", default)]
    pub language_elements: Vec<String>,
    /// Step element
    #[serde(rename = "Step", default)]
    pub step: Vec<ASFC_StepElement>,
    /// Transition element
    #[serde(rename = "Transition", default)]
    pub transition: Vec<ASFC_TransitionElement>,
    /// Branch element
    #[serde(rename = "Branch", default)]
    pub branch: Vec<ASFC_BranchElement>,
    /// SbrRet element
    #[serde(rename = "SbrRet", default)]
    pub sbr_ret: Vec<SFC_SBR_RET>,
    /// Stop element
    #[serde(rename = "Stop", default)]
    pub stop: Vec<ASFC_StopElement>,
    /// DirectedLink element
    #[serde(rename = "DirectedLink", default)]
    pub directed_link: Vec<ASFC_LangElemWire>,
    /// TextBox element
    #[serde(rename = "TextBox", default)]
    pub text_box: Vec<TextBox>,
    /// Attachment element
    #[serde(rename = "Attachment", default)]
    pub attachment: Vec<AAttachment>,
}

/// SEQContentType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SEQContent {
    /// SheetSize attribute
    #[serde(rename = "@SheetSize", default)]
    pub sheet_size: Option<String>,
    /// SheetOrientation attribute
    #[serde(rename = "@SheetOrientation", default)]
    pub sheet_orientation: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// LanguageElements element
    #[serde(rename = "LanguageElements", default)]
    pub language_elements: Vec<String>,
    /// Step element
    #[serde(rename = "Step", default)]
    pub step: Vec<ASFC_StepElement>,
    /// Transition element
    #[serde(rename = "Transition", default)]
    pub transition: Vec<ASFC_TransitionElement>,
    /// Branch element
    #[serde(rename = "Branch", default)]
    pub branch: Vec<ASFC_BranchElement>,
    /// Stop element
    #[serde(rename = "Stop", default)]
    pub stop: Vec<ASFC_StopElement>,
    /// DirectedLink element
    #[serde(rename = "DirectedLink", default)]
    pub directed_link: Vec<ASFC_LangElemWire>,
    /// TextBox element
    #[serde(rename = "TextBox", default)]
    pub text_box: Vec<TextBox>,
    /// Attachment element
    #[serde(rename = "Attachment", default)]
    pub attachment: Vec<AAttachment>,
    /// TagConfigurations element
    #[serde(rename = "TagConfigurations", default)]
    pub tag_configurations: Option<TagConfigurationsAdaptor>,
}

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

/// SFC_ActionElementType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SFC_ActionElement {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// OperandIOI attribute
    #[serde(rename = "@OperandIOI", default)]
    pub operand_ioi: Option<String>,
    /// ComponentIOI attribute
    #[serde(rename = "@ComponentIOI", default)]
    pub component_ioi: Option<String>,
    /// Qualifier attribute
    #[serde(rename = "@Qualifier", default)]
    pub qualifier: Option<String>,
    /// IsBoolean attribute
    #[serde(rename = "@IsBoolean", default)]
    pub is_boolean: Option<String>,
    /// PresetUsesExpr attribute
    #[serde(rename = "@PresetUsesExpr", default)]
    pub preset_uses_expr: Option<String>,
    /// IndicatorTag attribute
    #[serde(rename = "@IndicatorTag", default)]
    pub indicator_tag: Option<String>,
    /// IndicatorTagIOI attribute
    #[serde(rename = "@IndicatorTagIOI", default)]
    pub indicator_tag_ioi: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Preset element
    #[serde(rename = "Preset", default)]
    pub preset: Option<EmbeddedLanguageBlock>,
    /// Body element
    #[serde(rename = "Body", default)]
    pub body: Option<EmbeddedLanguageBlock>,
}

/// SFC_SBR_RETType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SFC_SBR_RET {
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: String,
    /// X attribute
    #[serde(rename = "@X", default)]
    pub x: String,
    /// Y attribute
    #[serde(rename = "@Y", default)]
    pub y: String,
    /// In attribute
    #[serde(rename = "@In", default)]
    pub r#in: Option<String>,
    /// InIOI attribute
    #[serde(rename = "@InIOI", default)]
    pub in_ioi: Option<String>,
    /// Ret attribute
    #[serde(rename = "@Ret", default)]
    pub ret: Option<String>,
    /// RetIOI attribute
    #[serde(rename = "@RetIOI", default)]
    pub ret_ioi: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// InRegionId attribute
    #[serde(rename = "@InRegionId", default)]
    pub in_region_id: Option<String>,
    /// RetRegionId attribute
    #[serde(rename = "@RetRegionId", default)]
    pub ret_region_id: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// AAttachmentType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct AAttachment {
    /// FromID attribute
    #[serde(rename = "@FromID", default)]
    pub from_id: String,
    /// ToID attribute
    #[serde(rename = "@ToID", default)]
    pub to_id: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// Content variants for STContentType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum STContentContent {
    /// CustomProperties element
    CustomProperties(CustomPropertiesCollection),
    /// RegionIdList element
    RegionIdList(String),
    /// CompactSTLines element
    CompactSTLines(String),
    /// MetadataIdList element
    MetadataIdList(String),
    /// Line element
    Line(STLine),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for STContentContent {
    fn default() -> Self { STContentContent::TextContent(String::new()) }
}

/// STContentType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct STContent {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// Start attribute
    #[serde(rename = "@Start", default)]
    pub start: Option<String>,
    /// Count attribute
    #[serde(rename = "@Count", default)]
    pub count: Option<String>,
    /// OnlineEditType attribute
    #[serde(rename = "@OnlineEditType", default)]
    pub online_edit_type: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<STContentContent>,
}

/// STLineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct STLine {
    /// Number attribute
    #[serde(rename = "@Number", default)]
    pub number: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// MetadataId attribute
    #[serde(rename = "@MetadataId", default)]
    pub metadata_id: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Value element
    #[serde(rename = "Value", default)]
    pub value: Option<String>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

/// ExternalContentType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ExternalContent {
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// DLL element
    #[serde(rename = "DLL", default)]
    pub dll: Option<ExternalContentType_DLL_Inline>,
    /// EntryPoint element
    #[serde(rename = "EntryPoint", default)]
    pub entry_point: Option<ExternalContentType_EntryPoint_Inline>,
    /// ExternalRoutineXml element
    #[serde(rename = "ExternalRoutineXml", default)]
    pub external_routine_xml: Option<String>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

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

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

/// CSTType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CST {
    /// MasterID attribute
    #[serde(rename = "@MasterID", default)]
    pub master_id: String,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// Status attribute
    #[serde(rename = "@Status", default)]
    pub status: Option<String>,
    /// Master attribute
    #[serde(rename = "@Master", default)]
    pub master: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// WallClockTimeType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct WallClockTime {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// LocalTimeAdjustment attribute
    #[serde(rename = "@LocalTimeAdjustment", default)]
    pub local_time_adjustment: Option<String>,
    /// TimeZone attribute
    #[serde(rename = "@TimeZone", default)]
    pub time_zone: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

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

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

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

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

/// SerialPortType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct SerialPort {
    /// Channel attribute
    #[serde(rename = "@Channel", default)]
    pub channel: Option<String>,
    /// BaudRate attribute
    #[serde(rename = "@BaudRate", default)]
    pub baud_rate: Option<String>,
    /// Parity attribute
    #[serde(rename = "@Parity", default)]
    pub parity: Option<String>,
    /// DataBits attribute
    #[serde(rename = "@DataBits", default)]
    pub data_bits: Option<String>,
    /// StopBits attribute
    #[serde(rename = "@StopBits", default)]
    pub stop_bits: Option<String>,
    /// ComDriverId attribute
    #[serde(rename = "@ComDriverId", default)]
    pub com_driver_id: Option<String>,
    /// RTSOffDelay attribute
    #[serde(rename = "@RTSOffDelay", default)]
    pub rtsoff_delay: Option<String>,
    /// RTSSendDelay attribute
    #[serde(rename = "@RTSSendDelay", default)]
    pub rtssend_delay: Option<String>,
    /// ControlLine attribute
    #[serde(rename = "@ControlLine", default)]
    pub control_line: Option<String>,
    /// RemoteModeChangeFlag attribute
    #[serde(rename = "@RemoteModeChangeFlag", default)]
    pub remote_mode_change_flag: Option<String>,
    /// ModeChangeAttentionChar attribute
    #[serde(rename = "@ModeChangeAttentionChar", default)]
    pub mode_change_attention_char: Option<String>,
    /// SystemModeCharacter attribute
    #[serde(rename = "@SystemModeCharacter", default)]
    pub system_mode_character: Option<String>,
    /// UserModeCharacter attribute
    #[serde(rename = "@UserModeCharacter", default)]
    pub user_mode_character: Option<String>,
    /// DCDWaitDelay attribute
    #[serde(rename = "@DCDWaitDelay", default)]
    pub dcdwait_delay: Option<String>,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// ASCII element
    #[serde(rename = "ASCII", default)]
    pub ascii: Option<ASCIIDriver>,
    /// DF1 element
    #[serde(rename = "DF1", default)]
    pub df1: Option<DF1Driver>,
}

/// DF1DriverType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DF1Driver {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// DuplicateDetection attribute
    #[serde(rename = "@DuplicateDetection", default)]
    pub duplicate_detection: String,
    /// ErrorDetection attribute
    #[serde(rename = "@ErrorDetection", default)]
    pub error_detection: String,
    /// EmbeddedResponseEnable attribute
    #[serde(rename = "@EmbeddedResponseEnable", default)]
    pub embedded_response_enable: String,
    /// DF1Mode attribute
    #[serde(rename = "@DF1Mode", default)]
    pub df1_mode: String,
    /// ACKTimeout attribute
    #[serde(rename = "@ACKTimeout", default)]
    pub acktimeout: String,
    /// NAKReceiveLimit attribute
    #[serde(rename = "@NAKReceiveLimit", default)]
    pub nakreceive_limit: String,
    /// ENQTransmitLimit attribute
    #[serde(rename = "@ENQTransmitLimit", default)]
    pub enqtransmit_limit: String,
    /// TransmitRetries attribute
    #[serde(rename = "@TransmitRetries", default)]
    pub transmit_retries: String,
    /// StationAddress attribute
    #[serde(rename = "@StationAddress", default)]
    pub station_address: String,
    /// ReplyMessageWait attribute
    #[serde(rename = "@ReplyMessageWait", default)]
    pub reply_message_wait: String,
    /// PollingMode attribute
    #[serde(rename = "@PollingMode", default)]
    pub polling_mode: String,
    /// MasterMessageTransmit attribute
    #[serde(rename = "@MasterMessageTransmit", default)]
    pub master_message_transmit: String,
    /// NormalPollNodeFile attribute
    #[serde(rename = "@NormalPollNodeFile", default)]
    pub normal_poll_node_file: String,
    /// NormalPollGroupSize attribute
    #[serde(rename = "@NormalPollGroupSize", default)]
    pub normal_poll_group_size: String,
    /// PriorityPollNodeFile attribute
    #[serde(rename = "@PriorityPollNodeFile", default)]
    pub priority_poll_node_file: String,
    /// ActiveStationFile attribute
    #[serde(rename = "@ActiveStationFile", default)]
    pub active_station_file: String,
    /// SlavePollTimeout attribute
    #[serde(rename = "@SlavePollTimeout", default)]
    pub slave_poll_timeout: String,
    /// EOTSuppression attribute
    #[serde(rename = "@EOTSuppression", default)]
    pub eotsuppression: String,
    /// MaxStationAddress attribute
    #[serde(rename = "@MaxStationAddress", default)]
    pub max_station_address: String,
    /// TokenHoldFactor attribute
    #[serde(rename = "@TokenHoldFactor", default)]
    pub token_hold_factor: String,
    /// StoreFwdFile attribute
    #[serde(rename = "@StoreFwdFile", default)]
    pub store_fwd_file: String,
    /// EnableStoreFwd attribute
    #[serde(rename = "@EnableStoreFwd", default)]
    pub enable_store_fwd: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// ASCIIDriverType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ASCIIDriver {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// XONXOFFEnable attribute
    #[serde(rename = "@XONXOFFEnable", default)]
    pub xonxoffenable: String,
    /// DeleteMode attribute
    #[serde(rename = "@DeleteMode", default)]
    pub delete_mode: String,
    /// EchoMode attribute
    #[serde(rename = "@EchoMode", default)]
    pub echo_mode: String,
    /// TerminationChars attribute
    #[serde(rename = "@TerminationChars", default)]
    pub termination_chars: String,
    /// AppendChars attribute
    #[serde(rename = "@AppendChars", default)]
    pub append_chars: String,
    /// BufferSize attribute
    #[serde(rename = "@BufferSize", default)]
    pub buffer_size: String,
    /// Verified attribute
    #[serde(rename = "@Verified", default)]
    pub verified: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// HMIBCType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct HMIBC {
    /// EnableIn attribute
    #[serde(rename = "@EnableIn", default)]
    pub enable_in: Option<String>,
    /// ProgFB attribute
    #[serde(rename = "@ProgFB", default)]
    pub prog_fb: Option<String>,
    /// BitIndex attribute
    #[serde(rename = "@BitIndex", default)]
    pub bit_index: Option<String>,
    /// TerminalCount attribute
    #[serde(rename = "@TerminalCount", default)]
    pub terminal_count: Option<String>,
    /// EnableOut attribute
    #[serde(rename = "@EnableOut", default)]
    pub enable_out: Option<String>,
    /// ButtonState attribute
    #[serde(rename = "@ButtonState", default)]
    pub button_state: Option<String>,
    /// Out attribute
    #[serde(rename = "@Out", default)]
    pub out: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// MsgType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Msg {
    /// MessageType attribute
    #[serde(rename = "@MessageType", default)]
    pub message_type: String,
    /// RemoteElement attribute
    #[serde(rename = "@RemoteElement", default)]
    pub remote_element: Option<String>,
    /// RequestedLength attribute
    #[serde(rename = "@RequestedLength", default)]
    pub requested_length: Option<String>,
    /// ConnectedFlag attribute
    #[serde(rename = "@ConnectedFlag", default)]
    pub connected_flag: Option<String>,
    /// ConnectionPath attribute
    #[serde(rename = "@ConnectionPath", default)]
    pub connection_path: Option<String>,
    /// CommTypeCode attribute
    #[serde(rename = "@CommTypeCode", default)]
    pub comm_type_code: Option<String>,
    /// ServiceCode attribute
    #[serde(rename = "@ServiceCode", default)]
    pub service_code: Option<String>,
    /// ObjectType attribute
    #[serde(rename = "@ObjectType", default)]
    pub object_type: Option<String>,
    /// TargetObject attribute
    #[serde(rename = "@TargetObject", default)]
    pub target_object: Option<String>,
    /// AttributeNumber attribute
    #[serde(rename = "@AttributeNumber", default)]
    pub attribute_number: Option<String>,
    /// Channel attribute
    #[serde(rename = "@Channel", default)]
    pub channel: Option<String>,
    /// DHPlusSourceLink attribute
    #[serde(rename = "@DHPlusSourceLink", default)]
    pub dhplus_source_link: Option<String>,
    /// DHPlusDestinationLink attribute
    #[serde(rename = "@DHPlusDestinationLink", default)]
    pub dhplus_destination_link: Option<String>,
    /// DHPlusDestinationNode attribute
    #[serde(rename = "@DHPlusDestinationNode", default)]
    pub dhplus_destination_node: Option<String>,
    /// Rack attribute
    #[serde(rename = "@Rack", default)]
    pub rack: Option<String>,
    /// Group attribute
    #[serde(rename = "@Group", default)]
    pub group: Option<String>,
    /// Slot attribute
    #[serde(rename = "@Slot", default)]
    pub slot: Option<String>,
    /// LocalIndex attribute
    #[serde(rename = "@LocalIndex", default)]
    pub local_index: Option<String>,
    /// RemoteIndex attribute
    #[serde(rename = "@RemoteIndex", default)]
    pub remote_index: Option<String>,
    /// LocalElement attribute
    #[serde(rename = "@LocalElement", default)]
    pub local_element: Option<String>,
    /// DestinationTag attribute
    #[serde(rename = "@DestinationTag", default)]
    pub destination_tag: Option<String>,
    /// CacheConnections attribute
    #[serde(rename = "@CacheConnections", default)]
    pub cache_connections: Option<String>,
    /// LargePacketUsage attribute
    #[serde(rename = "@LargePacketUsage", default)]
    pub large_packet_usage: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// CoordinateSystemType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CoordinateSystem {
    /// MotionGroupInstance attribute
    #[serde(rename = "@MotionGroupInstance", default)]
    pub motion_group_instance: Option<String>,
    /// ApplicationCatalogNumberInstance attribute
    #[serde(rename = "@ApplicationCatalogNumberInstance", default)]
    pub application_catalog_number_instance: Option<String>,
    /// ApplicationCatalogNumberVersion attribute
    #[serde(rename = "@ApplicationCatalogNumberVersion", default)]
    pub application_catalog_number_version: Option<String>,
    /// ApplicationCatalogNumber attribute
    #[serde(rename = "@ApplicationCatalogNumber", default)]
    pub application_catalog_number: Option<String>,
    /// SystemType attribute
    #[serde(rename = "@SystemType", default)]
    pub system_type: Option<String>,
    /// CoordinateDefinition attribute
    #[serde(rename = "@CoordinateDefinition", default)]
    pub coordinate_definition: Option<String>,
    /// Dimension attribute
    #[serde(rename = "@Dimension", default)]
    pub dimension: Option<String>,
    /// Axes attribute
    #[serde(rename = "@Axes", default)]
    pub axes: Option<String>,
    /// MaximumPendingMoves attribute
    #[serde(rename = "@MaximumPendingMoves", default)]
    pub maximum_pending_moves: Option<String>,
    /// CoordinationMode attribute
    #[serde(rename = "@CoordinationMode", default)]
    pub coordination_mode: Option<String>,
    /// CoordinationUnits attribute
    #[serde(rename = "@CoordinationUnits", default)]
    pub coordination_units: Option<String>,
    /// ConversionRatioNumerator attribute
    #[serde(rename = "@ConversionRatioNumerator", default)]
    pub conversion_ratio_numerator: Option<String>,
    /// ConversionRatioDenominator attribute
    #[serde(rename = "@ConversionRatioDenominator", default)]
    pub conversion_ratio_denominator: Option<String>,
    /// CoordinateSystemAutoTagUpdate attribute
    #[serde(rename = "@CoordinateSystemAutoTagUpdate", default)]
    pub coordinate_system_auto_tag_update: Option<String>,
    /// MaximumSpeed attribute
    #[serde(rename = "@MaximumSpeed", default)]
    pub maximum_speed: Option<String>,
    /// MaximumAcceleration attribute
    #[serde(rename = "@MaximumAcceleration", default)]
    pub maximum_acceleration: Option<String>,
    /// MaximumDeceleration attribute
    #[serde(rename = "@MaximumDeceleration", default)]
    pub maximum_deceleration: Option<String>,
    /// ActualPositionTolerance attribute
    #[serde(rename = "@ActualPositionTolerance", default)]
    pub actual_position_tolerance: Option<String>,
    /// CommandPositionTolerance attribute
    #[serde(rename = "@CommandPositionTolerance", default)]
    pub command_position_tolerance: Option<String>,
    /// TransformDimension attribute
    #[serde(rename = "@TransformDimension", default)]
    pub transform_dimension: Option<String>,
    /// JointRatioNumerator attribute
    #[serde(rename = "@JointRatioNumerator", default)]
    pub joint_ratio_numerator: Option<String>,
    /// JointRatioDenominator attribute
    #[serde(rename = "@JointRatioDenominator", default)]
    pub joint_ratio_denominator: Option<String>,
    /// LinkLength1 attribute
    #[serde(rename = "@LinkLength1", default)]
    pub link_length1: Option<String>,
    /// LinkLength2 attribute
    #[serde(rename = "@LinkLength2", default)]
    pub link_length2: Option<String>,
    /// ZeroAngleOffset1 attribute
    #[serde(rename = "@ZeroAngleOffset1", default)]
    pub zero_angle_offset1: Option<String>,
    /// ZeroAngleOffset2 attribute
    #[serde(rename = "@ZeroAngleOffset2", default)]
    pub zero_angle_offset2: Option<String>,
    /// ZeroAngleOffset3 attribute
    #[serde(rename = "@ZeroAngleOffset3", default)]
    pub zero_angle_offset3: Option<String>,
    /// BaseOffset1 attribute
    #[serde(rename = "@BaseOffset1", default)]
    pub base_offset1: Option<String>,
    /// BaseOffset2 attribute
    #[serde(rename = "@BaseOffset2", default)]
    pub base_offset2: Option<String>,
    /// BaseOffset3 attribute
    #[serde(rename = "@BaseOffset3", default)]
    pub base_offset3: Option<String>,
    /// EndEffectorOffset1 attribute
    #[serde(rename = "@EndEffectorOffset1", default)]
    pub end_effector_offset1: Option<String>,
    /// EndEffectorOffset2 attribute
    #[serde(rename = "@EndEffectorOffset2", default)]
    pub end_effector_offset2: Option<String>,
    /// EndEffectorOffset3 attribute
    #[serde(rename = "@EndEffectorOffset3", default)]
    pub end_effector_offset3: Option<String>,
    /// DynamicsConfigurationBits attribute
    #[serde(rename = "@DynamicsConfigurationBits", default)]
    pub dynamics_configuration_bits: Option<String>,
    /// MaximumAccelerationJerk attribute
    #[serde(rename = "@MaximumAccelerationJerk", default)]
    pub maximum_acceleration_jerk: Option<String>,
    /// MaximumDecelerationJerk attribute
    #[serde(rename = "@MaximumDecelerationJerk", default)]
    pub maximum_deceleration_jerk: Option<String>,
    /// MasterInputConfigurationBits attribute
    #[serde(rename = "@MasterInputConfigurationBits", default)]
    pub master_input_configuration_bits: Option<String>,
    /// MasterPositionFilterBandwidth attribute
    #[serde(rename = "@MasterPositionFilterBandwidth", default)]
    pub master_position_filter_bandwidth: Option<String>,
    /// LinkLength3 attribute
    #[serde(rename = "@LinkLength3", default)]
    pub link_length3: Option<String>,
    /// BallScrewLead attribute
    #[serde(rename = "@BallScrewLead", default)]
    pub ball_screw_lead: Option<String>,
    /// ZeroAngleOffset4 attribute
    #[serde(rename = "@ZeroAngleOffset4", default)]
    pub zero_angle_offset4: Option<String>,
    /// ZeroAngleOffset5 attribute
    #[serde(rename = "@ZeroAngleOffset5", default)]
    pub zero_angle_offset5: Option<String>,
    /// ZeroAngleOffset6 attribute
    #[serde(rename = "@ZeroAngleOffset6", default)]
    pub zero_angle_offset6: Option<String>,
    /// MaximumOrientationSpeed attribute
    #[serde(rename = "@MaximumOrientationSpeed", default)]
    pub maximum_orientation_speed: Option<String>,
    /// MaximumOrientationAcceleration attribute
    #[serde(rename = "@MaximumOrientationAcceleration", default)]
    pub maximum_orientation_acceleration: Option<String>,
    /// MaximumOrientationDeceleration attribute
    #[serde(rename = "@MaximumOrientationDeceleration", default)]
    pub maximum_orientation_deceleration: Option<String>,
    /// SwingArmA3 attribute
    #[serde(rename = "@SwingArmA3", default)]
    pub swing_arm_a3: Option<String>,
    /// SwingArmD3 attribute
    #[serde(rename = "@SwingArmD3", default)]
    pub swing_arm_d3: Option<String>,
    /// SwingArmA4 attribute
    #[serde(rename = "@SwingArmA4", default)]
    pub swing_arm_a4: Option<String>,
    /// SwingArmD4 attribute
    #[serde(rename = "@SwingArmD4", default)]
    pub swing_arm_d4: Option<String>,
    /// SwingArmD5 attribute
    #[serde(rename = "@SwingArmD5", default)]
    pub swing_arm_d5: Option<String>,
    /// SwingArmCouplingRatioNumerator attribute
    #[serde(rename = "@SwingArmCouplingRatioNumerator", default)]
    pub swing_arm_coupling_ratio_numerator: Option<String>,
    /// SwingArmCouplingRatioDenominator attribute
    #[serde(rename = "@SwingArmCouplingRatioDenominator", default)]
    pub swing_arm_coupling_ratio_denominator: Option<String>,
    /// SwingArmCouplingDirection attribute
    #[serde(rename = "@SwingArmCouplingDirection", default)]
    pub swing_arm_coupling_direction: Option<String>,
    /// RobotJointsDirectionSenseBits attribute
    #[serde(rename = "@RobotJointsDirectionSenseBits", default)]
    pub robot_joints_direction_sense_bits: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

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

/// PenType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Pen {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Color attribute
    #[serde(rename = "@Color", default)]
    pub color: Option<String>,
    /// Visible attribute
    #[serde(rename = "@Visible", default)]
    pub visible: Option<String>,
    /// Width attribute
    #[serde(rename = "@Width", default)]
    pub width: Option<String>,
    /// Type attribute
    #[serde(rename = "@Type", default)]
    pub r#type: Option<String>,
    /// Style attribute
    #[serde(rename = "@Style", default)]
    pub style: Option<String>,
    /// Marker attribute
    #[serde(rename = "@Marker", default)]
    pub marker: Option<String>,
    /// Min attribute
    #[serde(rename = "@Min", default)]
    pub min: Option<String>,
    /// Max attribute
    #[serde(rename = "@Max", default)]
    pub max: Option<String>,
    /// EngUnits attribute
    #[serde(rename = "@EngUnits", default)]
    pub eng_units: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Description element
    #[serde(rename = "Description", default)]
    pub description: Option<Description>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

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

/// QuickWatchAdaptorType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct QuickWatchAdaptor {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: String,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// WatchTag element
    #[serde(rename = "WatchTag", default)]
    pub watch_tag: Vec<QuickWatchTagAdaptor>,
}

/// TimeSynchronizeType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TimeSynchronize {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Priority1 attribute
    #[serde(rename = "@Priority1", default)]
    pub priority1: Option<String>,
    /// Priority2 attribute
    #[serde(rename = "@Priority2", default)]
    pub priority2: Option<String>,
    /// PTPEnable attribute
    #[serde(rename = "@PTPEnable", default)]
    pub ptpenable: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// TCPIPType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TCPIP {
    /// ConfigType attribute
    #[serde(rename = "@ConfigType", default)]
    pub config_type: Option<String>,
    /// IPAddress attribute
    #[serde(rename = "@IPAddress", default)]
    pub ipaddress: Option<String>,
    /// SubnetMask attribute
    #[serde(rename = "@SubnetMask", default)]
    pub subnet_mask: Option<String>,
    /// Gateway attribute
    #[serde(rename = "@Gateway", default)]
    pub gateway: Option<String>,
    /// PrimaryDNS attribute
    #[serde(rename = "@PrimaryDNS", default)]
    pub primary_dns: Option<String>,
    /// SecondaryDNS attribute
    #[serde(rename = "@SecondaryDNS", default)]
    pub secondary_dns: Option<String>,
    /// DomainName attribute
    #[serde(rename = "@DomainName", default)]
    pub domain_name: Option<String>,
    /// HostName attribute
    #[serde(rename = "@HostName", default)]
    pub host_name: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

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

/// EthernetLinkType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EthernetLink {
    /// Port attribute
    #[serde(rename = "@Port", default)]
    pub port: Option<String>,
    /// Label attribute
    #[serde(rename = "@Label", default)]
    pub label: Option<String>,
    /// PortEnabled attribute
    #[serde(rename = "@PortEnabled", default)]
    pub port_enabled: Option<String>,
    /// AutoNegotiateEnabled attribute
    #[serde(rename = "@AutoNegotiateEnabled", default)]
    pub auto_negotiate_enabled: Option<String>,
    /// InterfaceSpeed attribute
    #[serde(rename = "@InterfaceSpeed", default)]
    pub interface_speed: Option<String>,
    /// DuplexMode attribute
    #[serde(rename = "@DuplexMode", default)]
    pub duplex_mode: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

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

/// EncryptionKeyType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EncryptionKey {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// ID attribute
    #[serde(rename = "@ID", default)]
    pub id: Option<String>,
    /// Description attribute
    #[serde(rename = "@Description", default)]
    pub description: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// PublicKey attribute
    #[serde(rename = "@PublicKey", default)]
    pub public_key: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// EncryptedContentType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EncryptedContent {
    /// EncryptedType attribute
    #[serde(rename = "@EncryptedType", default)]
    pub encrypted_type: String,
    /// OnlineEditType attribute
    #[serde(rename = "@OnlineEditType", default)]
    pub online_edit_type: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

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

/// BEOType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct BEO {
    /// EnergyResourceType attribute
    #[serde(rename = "@EnergyResourceType", default)]
    pub energy_resource_type: String,
    /// BaseEnergyObjectCapabilities attribute
    #[serde(rename = "@BaseEnergyObjectCapabilities", default)]
    pub base_energy_object_capabilities: String,
    /// EnergyAccuracy attribute
    #[serde(rename = "@EnergyAccuracy", default)]
    pub energy_accuracy: Option<String>,
    /// DataStatus attribute
    #[serde(rename = "@DataStatus", default)]
    pub data_status: Option<String>,
    /// ConsumedEnergyOdometer attribute
    #[serde(rename = "@ConsumedEnergyOdometer", default)]
    pub consumed_energy_odometer: Option<String>,
    /// GeneratedEnergyOdometer attribute
    #[serde(rename = "@GeneratedEnergyOdometer", default)]
    pub generated_energy_odometer: Option<String>,
    /// NetEnergyOdometer attribute
    #[serde(rename = "@NetEnergyOdometer", default)]
    pub net_energy_odometer: Option<String>,
    /// EnergyTransferRate attribute
    #[serde(rename = "@EnergyTransferRate", default)]
    pub energy_transfer_rate: Option<String>,
    /// ExtendedDataStatus attribute
    #[serde(rename = "@ExtendedDataStatus", default)]
    pub extended_data_status: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// EEOType element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EEO {
    /// RealEnergyConsumedOdometer attribute
    #[serde(rename = "@RealEnergyConsumedOdometer", default)]
    pub real_energy_consumed_odometer: Option<String>,
    /// RealEnergyGeneratedOdometer attribute
    #[serde(rename = "@RealEnergyGeneratedOdometer", default)]
    pub real_energy_generated_odometer: Option<String>,
    /// RealEnergyNetOdometer attribute
    #[serde(rename = "@RealEnergyNetOdometer", default)]
    pub real_energy_net_odometer: Option<String>,
    /// TotalRealPower attribute
    #[serde(rename = "@TotalRealPower", default)]
    pub total_real_power: Option<String>,
    /// ThreePhaseTruePowerFactor attribute
    #[serde(rename = "@ThreePhaseTruePowerFactor", default)]
    pub three_phase_true_power_factor: Option<String>,
    /// PhaseRotation attribute
    #[serde(rename = "@PhaseRotation", default)]
    pub phase_rotation: Option<String>,
    /// Use attribute
    #[serde(rename = "@Use", default)]
    pub r#use: Option<String>,
    /// CustomProperties element
    #[serde(rename = "CustomProperties", default)]
    pub custom_properties: Option<CustomPropertiesCollection>,
}

/// Content variants for DependenciesWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum DependenciesWideContent {
    /// Dependency element
    Dependency(DataTypeDependency),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for DependenciesWideContent {
    fn default() -> Self { DependenciesWideContent::TextContent(String::new()) }
}

/// DependenciesWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DependenciesWide {
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<DependenciesWideContent>,
}

/// DependencyWideType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DependencyWide {
    /// Type attribute
    #[serde(rename = "@Type", default)]
    pub r#type: Option<String>,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// DataValue element
    #[serde(rename = "DataValue", default)]
    pub data_value: Vec<DataValue>,
    /// Array element
    #[serde(rename = "Array", default)]
    pub array: Vec<Box<DataArray>>,
    /// Structure element
    #[serde(rename = "Structure", default)]
    pub structure: Vec<Box<DataStructure>>,
    /// Text content
    #[serde(rename = "$text", default)]
    pub text: Option<String>,
}

/// Content variants for EncodedWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum EncodedWideContent {
    /// Description element
    Description(Description),
    /// RevisionNote element
    RevisionNote(RevisionNote),
    /// SignatureHistory element
    SignatureHistory(SignatureHistory),
    /// AdditionalHelpText element
    AdditionalHelpText(AdditionalHelpText),
    /// Parameters element
    Parameters(UDIParameterCollection),
    /// Dependencies element
    Dependencies(DataTypeDependencyCollection),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for EncodedWideContent {
    fn default() -> Self { EncodedWideContent::TextContent(String::new()) }
}

/// EncodedWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct EncodedWide {
    /// EncodedType attribute
    #[serde(rename = "@EncodedType", default)]
    pub encoded_type: Option<String>,
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Class attribute
    #[serde(rename = "@Class", default)]
    pub class: Option<String>,
    /// Revision attribute
    #[serde(rename = "@Revision", default)]
    pub revision: Option<String>,
    /// RevisionExtension attribute
    #[serde(rename = "@RevisionExtension", default)]
    pub revision_extension: Option<String>,
    /// Vendor attribute
    #[serde(rename = "@Vendor", default)]
    pub vendor: Option<String>,
    /// SignatureID attribute
    #[serde(rename = "@SignatureID", default)]
    pub signature_id: Option<String>,
    /// SignatureTimestamp attribute
    #[serde(rename = "@SignatureTimestamp", default)]
    pub signature_timestamp: Option<String>,
    /// SafetySignatureID attribute
    #[serde(rename = "@SafetySignatureID", default)]
    pub safety_signature_id: Option<String>,
    /// EditedDate attribute
    #[serde(rename = "@EditedDate", default)]
    pub edited_date: Option<String>,
    /// SoftwareRevision attribute
    #[serde(rename = "@SoftwareRevision", default)]
    pub software_revision: Option<String>,
    /// OriginalLibrary attribute
    #[serde(rename = "@OriginalLibrary", default)]
    pub original_library: Option<String>,
    /// OriginalName attribute
    #[serde(rename = "@OriginalName", default)]
    pub original_name: Option<String>,
    /// OriginalRevision attribute
    #[serde(rename = "@OriginalRevision", default)]
    pub original_revision: Option<String>,
    /// OriginalVendor attribute
    #[serde(rename = "@OriginalVendor", default)]
    pub original_vendor: Option<String>,
    /// PermissionSet attribute
    #[serde(rename = "@PermissionSet", default)]
    pub permission_set: Option<String>,
    /// EncryptionConfig attribute
    #[serde(rename = "@EncryptionConfig", default)]
    pub encryption_config: Option<String>,
    /// IsEncrypted attribute
    #[serde(rename = "@IsEncrypted", default)]
    pub is_encrypted: Option<String>,
    /// LogicHash attribute
    #[serde(rename = "@LogicHash", default)]
    pub logic_hash: Option<String>,
    /// DescriptionHash attribute
    #[serde(rename = "@DescriptionHash", default)]
    pub description_hash: Option<String>,
    /// Type attribute
    #[serde(rename = "@Type", default)]
    pub r#type: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<EncodedWideContent>,
}

/// Content variants for DefaultDataWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum DefaultDataWideContent {
    /// Value element
    Value(DefaultDataWideType_Value_Inline),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for DefaultDataWideContent {
    fn default() -> Self { DefaultDataWideContent::TextContent(String::new()) }
}

/// DefaultDataWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DefaultDataWide {
    /// Format attribute
    #[serde(rename = "@Format", default)]
    pub format: Option<String>,
    /// Length attribute
    #[serde(rename = "@Length", default)]
    pub length: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<DefaultDataWideContent>,
}

/// DefaultDataWideType_Value_InlineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DefaultDataWideType_Value_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>,
}

/// Content variants for CommentWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum CommentWideContent {
    /// Value element
    Value(String),
    /// LocalizedComment element
    LocalizedComment(CommentAdaptorText),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for CommentWideContent {
    fn default() -> Self { CommentWideContent::TextContent(String::new()) }
}

/// CommentWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct CommentWide {
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Unused attribute
    #[serde(rename = "@Unused", default)]
    pub unused: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<CommentWideContent>,
}

/// Content variants for ForceDataWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ForceDataWideContent {
    /// Value element
    Value(ForceDataWideType_Value_Inline),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for ForceDataWideContent {
    fn default() -> Self { ForceDataWideContent::TextContent(String::new()) }
}

/// ForceDataWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ForceDataWide {
    /// Format attribute
    #[serde(rename = "@Format", default)]
    pub format: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<ForceDataWideContent>,
}

/// ForceDataWideType_Value_InlineType element
///
/// Note: Mixed content type
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct ForceDataWideType_Value_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>,
}

/// Content variants for TextWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum TextWideContent {
    /// Value element
    Value(String),
    /// LocalizedText element
    LocalizedText(TextBoxAdaptorText),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for TextWideContent {
    fn default() -> Self { TextWideContent::TextContent(String::new()) }
}

/// TextWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TextWide {
    /// Lang attribute
    #[serde(rename = "@Lang", default)]
    pub lang: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<TextWideContent>,
}

/// Content variants for LabelsWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum LabelsWideContent {
    /// Label element
    Label(Label),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for LabelsWideContent {
    fn default() -> Self { LabelsWideContent::TextContent(String::new()) }
}

/// LabelsWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LabelsWide {
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<LabelsWideContent>,
}

/// Content variants for LabelWideType mixed content
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum LabelWideContent {
    /// Value element
    Value(String),
    /// LocalizedLabel element
    LocalizedLabel(LabelText),
    /// DataValue element
    DataValue(DataValue),
    /// Array element
    Array(Box<DataArray>),
    /// Structure element
    Structure(Box<DataStructure>),
    /// Text content (not serialized - raw text in mixed content)
    #[serde(rename = "$text", skip_serializing)]
    TextContent(String),
}

impl Default for LabelWideContent {
    fn default() -> Self { LabelWideContent::TextContent(String::new()) }
}

/// LabelWideType element
///
/// Note: Mixed content type with unbounded children
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct LabelWide {
    /// Name attribute
    #[serde(rename = "@Name", default)]
    pub name: Option<String>,
    /// UId attribute
    #[serde(rename = "@UId", default)]
    pub uid: Option<String>,
    /// Operand attribute
    #[serde(rename = "@Operand", default)]
    pub operand: Option<String>,
    /// Mixed content (elements and text)
    #[serde(rename = "$value", default)]
    pub content: Vec<LabelWideContent>,
}

