use crate::types::basic::OSString;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[derive(Default)]
pub struct TrailerAction {
#[serde(
rename = "ConnectTrailerAction",
skip_serializing_if = "Option::is_none"
)]
pub connect_trailer_action: Option<ConnectTrailerAction>,
#[serde(
rename = "DisconnectTrailerAction",
skip_serializing_if = "Option::is_none"
)]
pub disconnect_trailer_action: Option<DisconnectTrailerAction>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ConnectTrailerAction {
#[serde(rename = "@trailerRef")]
pub trailer_ref: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[derive(Default)]
pub struct DisconnectTrailerAction {
}
impl Default for ConnectTrailerAction {
fn default() -> Self {
Self {
trailer_ref: OSString::literal("DefaultTrailer".to_string()),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_connect_trailer_action() {
let action = ConnectTrailerAction {
trailer_ref: OSString::literal("TestTrailer".to_string()),
};
assert_eq!(
action.trailer_ref.as_literal(),
Some(&"TestTrailer".to_string())
);
}
#[test]
fn test_trailer_action_serialization() {
let action = TrailerAction {
connect_trailer_action: Some(ConnectTrailerAction::default()),
disconnect_trailer_action: None,
};
let serialized = quick_xml::se::to_string(&action).expect("Serialization should succeed");
assert!(serialized.contains("ConnectTrailerAction"));
assert!(serialized.contains("DefaultTrailer"));
}
}