dogma/traits/
maybe_labeled.rs

1// This is free and unencumbered software released into the public domain.
2
3use crate::prelude::Cow;
4
5/// A trait for objects that may have a human-readable label.
6pub trait MaybeLabeled {
7    /// Returns the human-readable label, if any, of the object.
8    fn label(&self) -> Option<Cow<str>> {
9        None // the default
10    }
11
12    /// Checks whether the object has a human-readable label.
13    fn is_labeled(&self) -> bool {
14        self.label().is_some()
15    }
16}
17
18#[cfg(feature = "serde")]
19impl serde::Serialize for dyn MaybeLabeled {
20    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21    where
22        S: serde::Serializer,
23    {
24        match self.label() {
25            Some(ref value) => serializer.serialize_some(value.as_ref()),
26            None => serializer.serialize_none(),
27        }
28    }
29}