zkgroup/api/auth/
auth_credential_with_pni.rs1use num_enum::TryFromPrimitive;
7use partial_default::PartialDefault;
8use serde::Serialize;
9
10mod v0;
11pub use v0::{AuthCredentialWithPniV0, AuthCredentialWithPniV0Response};
12mod zkc;
13pub use zkc::{
14 AuthCredentialWithPniZkc, AuthCredentialWithPniZkcPresentation,
15 AuthCredentialWithPniZkcResponse,
16};
17
18use crate::ZkGroupDeserializationFailure;
19
20#[derive(Clone, PartialDefault)]
21pub enum AuthCredentialWithPni {
22 #[partial_default]
23 V0(AuthCredentialWithPniV0),
24 Zkc(AuthCredentialWithPniZkc),
25}
26
27#[derive(Clone, PartialDefault)]
28pub enum AuthCredentialWithPniResponse {
29 #[partial_default]
30 V0(AuthCredentialWithPniV0Response),
31 Zkc(AuthCredentialWithPniZkcResponse),
32}
33
34#[repr(u8)]
35#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialDefault, TryFromPrimitive)]
36pub enum AuthCredentialWithPniVersion {
37 #[partial_default]
38 V0 = 0,
39 Zkc = 3,
40}
41
42impl AuthCredentialWithPni {
43 pub fn new(bytes: &[u8]) -> Result<Self, ZkGroupDeserializationFailure> {
44 let first = bytes
45 .first()
46 .ok_or_else(ZkGroupDeserializationFailure::new::<Self>)?;
47 let version = AuthCredentialWithPniVersion::try_from(*first)
48 .map_err(|_| ZkGroupDeserializationFailure::new::<Self>())?;
49 match version {
50 AuthCredentialWithPniVersion::V0 => {
51 crate::common::serialization::deserialize(bytes).map(Self::V0)
52 }
53 AuthCredentialWithPniVersion::Zkc => {
54 crate::common::serialization::deserialize(bytes).map(Self::Zkc)
55 }
56 }
57 }
58}
59
60impl AuthCredentialWithPniResponse {
61 pub fn new(bytes: &[u8]) -> Result<Self, ZkGroupDeserializationFailure> {
62 let first = bytes
63 .first()
64 .ok_or_else(ZkGroupDeserializationFailure::new::<Self>)?;
65 let version = AuthCredentialWithPniVersion::try_from(*first)
66 .map_err(|_| ZkGroupDeserializationFailure::new::<Self>())?;
67 match version {
68 AuthCredentialWithPniVersion::V0 => {
69 crate::common::serialization::deserialize(bytes).map(Self::V0)
70 }
71 AuthCredentialWithPniVersion::Zkc => {
72 crate::common::serialization::deserialize(bytes).map(Self::Zkc)
73 }
74 }
75 }
76}
77
78impl From<AuthCredentialWithPniV0> for AuthCredentialWithPni {
79 fn from(value: AuthCredentialWithPniV0) -> Self {
80 Self::V0(value)
81 }
82}
83
84impl From<AuthCredentialWithPniV0Response> for AuthCredentialWithPniResponse {
85 fn from(value: AuthCredentialWithPniV0Response) -> Self {
86 Self::V0(value)
87 }
88}
89
90impl From<AuthCredentialWithPniZkc> for AuthCredentialWithPni {
91 fn from(value: AuthCredentialWithPniZkc) -> Self {
92 Self::Zkc(value)
93 }
94}
95
96impl From<AuthCredentialWithPniZkcResponse> for AuthCredentialWithPniResponse {
97 fn from(value: AuthCredentialWithPniZkcResponse) -> Self {
98 Self::Zkc(value)
99 }
100}
101
102impl Serialize for AuthCredentialWithPni {
103 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
104 where
105 S: serde::Serializer,
106 {
107 match self {
108 Self::V0(v) => v.serialize(serializer),
109 Self::Zkc(z) => z.serialize(serializer),
110 }
111 }
112}
113
114impl Serialize for AuthCredentialWithPniResponse {
115 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
116 where
117 S: serde::Serializer,
118 {
119 match self {
120 Self::V0(v) => v.serialize(serializer),
121 Self::Zkc(z) => z.serialize(serializer),
122 }
123 }
124}