A better Rust ATProto crate
at main 2.7 kB view raw
1use jacquard_common::{CowStr, IntoStatic}; 2use jose_jwa::Algorithm; 3use jose_jwk::Jwk; 4use serde::{Deserialize, Serialize}; 5 6#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] 7pub struct Header<'a> { 8 #[serde(flatten)] 9 #[serde(borrow)] 10 pub registered: RegisteredHeader<'a>, 11} 12 13impl<'a> From<Header<'a>> for super::super::jose::Header<'a> { 14 fn from(header: Header<'a>) -> Self { 15 super::super::jose::Header::Jws(header) 16 } 17} 18 19#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] 20 21pub struct RegisteredHeader<'a> { 22 pub alg: Algorithm, 23 #[serde(borrow)] 24 #[serde(skip_serializing_if = "Option::is_none")] 25 pub jku: Option<CowStr<'a>>, 26 #[serde(skip_serializing_if = "Option::is_none")] 27 pub jwk: Option<Jwk>, 28 #[serde(skip_serializing_if = "Option::is_none")] 29 pub kid: Option<CowStr<'a>>, 30 #[serde(skip_serializing_if = "Option::is_none")] 31 pub x5u: Option<CowStr<'a>>, 32 #[serde(skip_serializing_if = "Option::is_none")] 33 pub x5c: Option<CowStr<'a>>, 34 #[serde(skip_serializing_if = "Option::is_none")] 35 pub x5t: Option<CowStr<'a>>, 36 #[serde(skip_serializing_if = "Option::is_none")] 37 #[serde(rename = "x5t#S256")] 38 pub x5ts256: Option<CowStr<'a>>, 39 40 #[serde(skip_serializing_if = "Option::is_none")] 41 pub typ: Option<CowStr<'a>>, 42 #[serde(skip_serializing_if = "Option::is_none")] 43 pub cty: Option<CowStr<'a>>, 44} 45 46impl From<Algorithm> for RegisteredHeader<'_> { 47 fn from(alg: Algorithm) -> Self { 48 Self { 49 alg, 50 jku: None, 51 jwk: None, 52 kid: None, 53 x5u: None, 54 x5c: None, 55 x5t: None, 56 x5ts256: None, 57 typ: None, 58 cty: None, 59 } 60 } 61} 62 63impl<'a> From<RegisteredHeader<'a>> for super::super::jose::Header<'a> { 64 fn from(registered: RegisteredHeader<'a>) -> Self { 65 super::super::jose::Header::Jws(Header { registered }) 66 } 67} 68 69impl IntoStatic for RegisteredHeader<'_> { 70 type Output = RegisteredHeader<'static>; 71 fn into_static(self) -> Self::Output { 72 RegisteredHeader { 73 alg: self.alg, 74 jku: self.jku.map(IntoStatic::into_static), 75 jwk: self.jwk, 76 kid: self.kid.map(IntoStatic::into_static), 77 x5u: self.x5u.map(IntoStatic::into_static), 78 x5c: self.x5c.map(IntoStatic::into_static), 79 x5t: self.x5t.map(IntoStatic::into_static), 80 x5ts256: self.x5ts256.map(IntoStatic::into_static), 81 typ: self.typ.map(IntoStatic::into_static), 82 cty: self.cty.map(IntoStatic::into_static), 83 } 84 } 85}