use serde::{Deserialize, Serialize};
use super::data_item::DataItem;
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Attribute {
#[serde(rename = "@Name")]
#[doc(hidden)]
pub name: String,
#[serde(rename = "@AttributeType")]
#[doc(hidden)]
pub attribute_type: AttributeType,
#[serde(rename = "@Center")]
#[doc(hidden)]
pub center: Center,
#[serde(rename = "DataItem")]
#[doc(hidden)]
pub data_items: Vec<DataItem>,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
pub enum AttributeType {
#[default]
#[doc(hidden)]
Scalar,
#[doc(hidden)]
Vector,
#[doc(hidden)]
Tensor,
#[doc(hidden)]
Tensor6,
#[doc(hidden)]
Matrix,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
pub enum Center {
#[default]
#[doc(hidden)]
Node,
#[doc(hidden)]
Edge,
#[doc(hidden)]
Face,
#[doc(hidden)]
Cell,
#[doc(hidden)]
Grid,
#[doc(hidden)]
Other,
}
#[cfg(test)]
mod tests {
use quick_xml::se::to_string;
use super::*;
#[test]
fn attribute_default() {
let attribute = Attribute::default();
assert_eq!(attribute.name, "");
assert_eq!(attribute.attribute_type, AttributeType::Scalar);
assert_eq!(attribute.center, Center::Node);
}
#[test]
fn attribute_serialization() {
let attribute = Attribute {
name: String::from("Temperature"),
attribute_type: AttributeType::Scalar,
center: Center::Cell,
data_items: vec![DataItem::default(), DataItem::default()],
};
pretty_assertions::assert_eq!(
to_string(&attribute).unwrap(),
"<Attribute Name=\"Temperature\" AttributeType=\"Scalar\" Center=\"Cell\">\
<DataItem Dimensions=\"1\" NumberType=\"Float\" Format=\"XML\" Precision=\"4\"/>\
<DataItem Dimensions=\"1\" NumberType=\"Float\" Format=\"XML\" Precision=\"4\"/>\
</Attribute>"
);
}
#[test]
fn attribute_type_default() {
assert_eq!(AttributeType::default(), AttributeType::Scalar);
}
#[test]
fn center_default() {
assert_eq!(Center::default(), Center::Node);
}
}