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