use crate::unit::Unit;
#[cfg(feature = "os")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "os", derive(Serialize, Deserialize))]
pub struct Variable {
pub symbol: SymbolRaw,
pub unit: Option<Unit>,
pub fields: Vec<Field>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "os", derive(Serialize, Deserialize))]
pub struct Field {
pub name: String,
pub unit: Option<Unit>,
}
impl Variable {
pub fn full_symbol(&self) -> SymbolRaw {
let fields = self.fields.iter().map(|f| f.name.clone());
self.symbol.iter().cloned().chain(fields).collect()
}
}
pub type SymbolRef<'s> = &'s [String];
pub type SymbolRaw = Vec<String>;