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

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

/// rangeSigned element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct RangeSigned {
    /// lower attribute
    #[serde(rename = "@lower", default)]
    pub lower: String,
    /// upper attribute
    #[serde(rename = "@upper", default)]
    pub upper: String,
}

/// rangeUnsigned element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct RangeUnsigned {
    /// lower attribute
    #[serde(rename = "@lower", default)]
    pub lower: String,
    /// upper attribute
    #[serde(rename = "@upper", default)]
    pub upper: String,
}

/// value element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct Value {
    /// simpleValue element
    #[serde(rename = "simpleValue", default)]
    pub simple_value: Option<Value_simpleValue_Inline>,
    /// arrayValue element
    #[serde(rename = "arrayValue", default)]
    pub array_value: Option<Value_arrayValue_Inline>,
    /// structValue element
    #[serde(rename = "structValue", default)]
    pub struct_value: Option<Value_structValue_Inline>,
}

/// varList element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct VarList {
    /// name attribute
    #[serde(rename = "@name", default)]
    pub name: Option<String>,
    /// constant attribute
    #[serde(rename = "@constant", default)]
    pub constant: Option<String>,
    /// retain attribute
    #[serde(rename = "@retain", default)]
    pub retain: Option<String>,
    /// nonretain attribute
    #[serde(rename = "@nonretain", default)]
    pub nonretain: Option<String>,
    /// persistent attribute
    #[serde(rename = "@persistent", default)]
    pub persistent: Option<String>,
    /// nonpersistent attribute
    #[serde(rename = "@nonpersistent", default)]
    pub nonpersistent: Option<String>,
}

/// varListPlain element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct VarListPlain {
    /// variable element
    #[serde(rename = "variable", default)]
    pub variable: Vec<VarListPlain_variable_Inline>,
    /// addData element
    #[serde(rename = "addData", default)]
    pub add_data: Option<AddData>,
    /// documentation element
    #[serde(rename = "documentation", default)]
    pub documentation: Option<FormattedText>,
}

/// varListAccess element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct VarListAccess {
    /// accessVariable element
    #[serde(rename = "accessVariable", default)]
    pub access_variable: Vec<VarListAccess_accessVariable_Inline>,
    /// addData element
    #[serde(rename = "addData", default)]
    pub add_data: Option<AddData>,
    /// documentation element
    #[serde(rename = "documentation", default)]
    pub documentation: Option<FormattedText>,
}

/// varListConfig element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct VarListConfig {
    /// configVariable element
    #[serde(rename = "configVariable", default)]
    pub config_variable: Vec<VarListConfig_configVariable_Inline>,
    /// addData element
    #[serde(rename = "addData", default)]
    pub add_data: Option<AddData>,
    /// documentation element
    #[serde(rename = "documentation", default)]
    pub documentation: Option<FormattedText>,
}

/// formattedText element
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct FormattedText {
    /// Arbitrary child elements (xs:any) - skipped during deserialization
    #[serde(skip)]
    pub children: Vec<AnyElement>,
}

