use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AttrV<T> {
#[serde(rename = "@v")]
pub v: T,
}
impl<T> AttrV<T> {
pub fn new(v: T) -> Self {
Self { v }
}
}
impl<T: Clone> AttrV<T> {
pub fn value(&self) -> T {
self.v.clone()
}
}
impl<T> From<T> for AttrV<T> {
fn from(v: T) -> Self {
Self { v }
}
}
impl<T: fmt::Display> fmt::Display for AttrV<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.v.fmt(f)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AttrVWithScheme<T, S = crate::types::CodingScheme> {
#[serde(rename = "@v")]
pub v: T,
#[serde(rename = "@codingScheme")]
pub coding_scheme: S,
}
impl<T, S> AttrVWithScheme<T, S> {
pub fn new(v: T, coding_scheme: S) -> Self {
Self { v, coding_scheme }
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SimpleContent<T, S = crate::types::CodingScheme> {
#[serde(rename = "$text")]
pub value: T,
#[serde(rename = "@codingScheme")]
pub coding_scheme: S,
}
impl<T, S> SimpleContent<T, S> {
pub fn new(value: T, coding_scheme: S) -> Self {
Self {
value,
coding_scheme,
}
}
}