use secstr::SecStr;
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum Value {
Bytes(Vec<u8>),
Unprotected(String),
Protected(SecStr),
}
impl Value {
pub fn is_empty(&self) -> bool {
match self {
Value::Bytes(b) => b.is_empty(),
Value::Unprotected(u) => u.is_empty(),
Value::Protected(p) => p.unsecure().is_empty(),
}
}
}
#[cfg(feature = "serialization")]
impl serde::Serialize for Value {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
match self {
Value::Bytes(b) => serializer.serialize_bytes(b),
Value::Unprotected(u) => serializer.serialize_str(u),
Value::Protected(p) => serializer.serialize_str(String::from_utf8_lossy(p.unsecure()).as_ref()),
}
}
}