diff --git a/src/types/quota.rs b/src/types/quota.rs index 04afbbe..f5632eb 100644 --- a/src/types/quota.rs +++ b/src/types/quota.rs @@ -35,7 +35,7 @@ impl Display for QuotaResourceLimit<'_> { /// From [Resources](https://datatracker.ietf.org/doc/html/rfc2087#section-3) /// /// Used by [`QuotaLimit`], and [`QuotaResource`] -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq, Clone)] #[non_exhaustive] pub enum QuotaResourceName<'a> { /// Sum of messages' RFC822.SIZE, in units of 1024 octets @@ -56,6 +56,17 @@ impl Display for QuotaResourceName<'_> { } } +impl<'a> QuotaResourceName<'a> { + /// Get an owned version of the [`QuotaResourceName`]. + pub fn into_owned(self) -> QuotaResourceName<'static> { + match self { + QuotaResourceName::Storage => QuotaResourceName::Storage, + QuotaResourceName::Message => QuotaResourceName::Message, + QuotaResourceName::Atom(n) => QuotaResourceName::Atom(Cow::Owned(n.into_owned())), + } + } +} + /// From [QUOTA Response](https://datatracker.ietf.org/doc/html/rfc2087#section-5.1) /// /// This is a wrapper around a single single [`Quota`]. @@ -219,3 +230,17 @@ impl QuotaRootResponse { &self.borrow_inner().quotas[..] } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_quota_resource_name_into_owned() { + let name = "TEST"; + let borrowed = QuotaResourceName::Atom(Cow::Borrowed(name)); + + let new_owned = borrowed.into_owned(); + assert!(matches!(new_owned, QuotaResourceName::Atom(Cow::Owned(_)))); + } +}