use activitystreams_vocabulary::{impl_default, impl_display};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum CapabilityUsage {
GatherAndConvey,
Distribute,
Invoke,
}
impl CapabilityUsage {
pub const GATHER_AND_CONVEY: &str = "gatherAndConvey";
pub const DISTRIBUTE: &str = "distribute";
pub const INVOKE: &str = "invoke";
pub const fn new() -> Self {
Self::Invoke
}
pub const fn as_str(&self) -> &'static str {
match self {
Self::GatherAndConvey => Self::GATHER_AND_CONVEY,
Self::Distribute => Self::DISTRIBUTE,
Self::Invoke => Self::INVOKE,
}
}
}
impl_default!(CapabilityUsage);
impl_display!(CapabilityUsage, str);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_capability_usage() {
[
(
CapabilityUsage::GatherAndConvey,
CapabilityUsage::GATHER_AND_CONVEY,
),
(CapabilityUsage::Distribute, CapabilityUsage::DISTRIBUTE),
(CapabilityUsage::Invoke, CapabilityUsage::INVOKE),
]
.into_iter()
.for_each(|(cap, cap_str)| {
let json_str = format!(r#""{cap_str}""#);
assert_eq!(serde_json::to_string_pretty(&cap).unwrap(), json_str);
assert_eq!(
serde_json::from_str::<CapabilityUsage>(json_str.as_str()).unwrap(),
cap,
);
});
}
}