1use alloc::string::String;
2
3use serde::{Deserialize, Serialize};
4
5#[non_exhaustive]
12#[derive(Debug, Clone, Hash, PartialEq, Eq)]
13pub enum KeyUsage {
14 Signing,
16 Encryption,
18 Other(String),
21}
22
23impl Serialize for KeyUsage {
24 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: serde::Serializer,
27 {
28 match self {
29 Self::Signing => "sig",
30 Self::Encryption => "enc",
31 Self::Other(s) => s,
32 }
33 .serialize(serializer)
34 }
35}
36
37impl<'de> Deserialize<'de> for KeyUsage {
38 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
39 where
40 D: serde::Deserializer<'de>,
41 {
42 let val = <alloc::borrow::Cow<'_, str>>::deserialize(deserializer)?;
43 Ok(match &*val {
44 "sig" => Self::Signing,
45 "enc" => Self::Encryption,
46 _ => Self::Other(val.into_owned()),
47 })
48 }
49}