clauser 0.1.0

Library for parsing and deserializing Clausewitz files.
Documentation
use std::fmt::Debug;

pub enum MaybeOwned<'s, BorrowedT, OwnedT>
where
    BorrowedT: ?Sized,
{
    Borrowed(&'s BorrowedT),
    Owned(OwnedT),
}

impl<'s, BorrowedT, OwnedT> AsRef<BorrowedT> for MaybeOwned<'s, BorrowedT, OwnedT>
where
    OwnedT: AsRef<BorrowedT>,
{
    fn as_ref(&self) -> &BorrowedT {
        match self {
            Self::Borrowed(p) => p,
            Self::Owned(s) => s.as_ref(),
        }
    }
}

impl<'s, BorrowedT, OwnedT> From<&'s BorrowedT> for MaybeOwned<'s, BorrowedT, OwnedT> {
    fn from(value: &'s BorrowedT) -> Self {
        MaybeOwned::Borrowed(value)
    }
}

impl<'s, BorrowedT, OwnedT> Debug for MaybeOwned<'s, BorrowedT, OwnedT>
where
    &'s BorrowedT: Debug,
    OwnedT: Debug,
{
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Borrowed(arg0) => <&'s BorrowedT as Debug>::fmt(arg0, f),
            Self::Owned(arg0) => <OwnedT as Debug>::fmt(arg0, f),
        }
    }
}

pub type MaybeOwnedString<'s> = MaybeOwned<'s, str, String>;