use std::fmt;
use crate::arguments::{ArgumentScanner, ExpectArg, FromArgs};
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
pub struct StyleVersion<S = String> {
pub styleversion: S,
}
impl<S> StyleVersion<S> {
pub fn map_text<T, F>(self, f: F) -> StyleVersion<T>
where
F: FnOnce(S) -> T,
{
StyleVersion {
styleversion: f(self.styleversion),
}
}
}
impl_into_owned!(StyleVersion);
impl<S: AsRef<str>> StyleVersion<S> {
pub fn borrow_text(&self) -> StyleVersion<&str> {
StyleVersion {
styleversion: self.styleversion.as_ref(),
}
}
}
impl_partial_eq!(StyleVersion);
impl<'a, S: AsRef<str>> FromArgs<'a, S> for StyleVersion<S> {
fn from_args<A: ArgumentScanner<'a, Decoded = S>>(mut scanner: A) -> crate::Result<Self> {
let styleversion = scanner.get_next()?.expect_some("StyleVersion")?;
scanner.expect_end()?;
Ok(Self { styleversion })
}
}
impl_from_str!(StyleVersion);
impl<S: AsRef<str>> fmt::Display for StyleVersion<S> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let StyleVersion { styleversion } = self.borrow_text();
crate::display::ElementFormatter {
name: "VERSION",
arguments: &[&styleversion],
keywords: &[],
}
.fmt(f)
}
}