ssi_data_integrity_core/suite/
bounds.rs1use core::fmt;
2use std::fmt::Debug;
3
4use serde::{Deserializer, Serialize, Serializer};
5use ssi_core::de::DeserializeTyped;
6use ssi_verification_methods::{ReferenceOrOwned, ReferenceOrOwnedRef};
7
8use crate::Type;
9
10use super::CryptographicSuite;
11
12pub trait DebugCryptographicSuite: CryptographicSuite + Debug {
13 fn fmt_prepared_claims(claims: &Self::PreparedClaims, f: &mut fmt::Formatter) -> fmt::Result;
14
15 fn fmt_verification_method(
16 verification_method: &Self::VerificationMethod,
17 f: &mut fmt::Formatter,
18 ) -> fmt::Result;
19
20 fn fmt_verification_method_ref(
21 verification_method: &ReferenceOrOwnedRef<Self::VerificationMethod>,
22 f: &mut fmt::Formatter,
23 ) -> fmt::Result;
24
25 fn fmt_proof_options(options: &Self::ProofOptions, f: &mut fmt::Formatter) -> fmt::Result;
26
27 fn fmt_signature(signature: &Self::Signature, f: &mut fmt::Formatter) -> fmt::Result;
28}
29
30impl<S: CryptographicSuite + Debug> DebugCryptographicSuite for S
31where
32 Self::PreparedClaims: Debug,
33 Self::VerificationMethod: Debug,
34 Self::ProofOptions: Debug,
35 Self::Signature: Debug,
36{
37 fn fmt_prepared_claims(claims: &Self::PreparedClaims, f: &mut fmt::Formatter) -> fmt::Result {
38 claims.fmt(f)
39 }
40
41 fn fmt_verification_method(
42 verification_method: &Self::VerificationMethod,
43 f: &mut fmt::Formatter,
44 ) -> fmt::Result {
45 verification_method.fmt(f)
46 }
47
48 fn fmt_verification_method_ref(
49 verification_method: &ReferenceOrOwnedRef<Self::VerificationMethod>,
50 f: &mut fmt::Formatter,
51 ) -> fmt::Result {
52 verification_method.fmt(f)
53 }
54
55 fn fmt_proof_options(options: &Self::ProofOptions, f: &mut fmt::Formatter) -> fmt::Result {
56 options.fmt(f)
57 }
58
59 fn fmt_signature(signature: &Self::Signature, f: &mut fmt::Formatter) -> fmt::Result {
60 signature.fmt(f)
61 }
62}
63
64pub trait CloneCryptographicSuite: CryptographicSuite {
65 fn clone_prepared_claims(claims: &Self::PreparedClaims) -> Self::PreparedClaims;
66
67 fn clone_verification_method(
68 verification_method: &Self::VerificationMethod,
69 ) -> Self::VerificationMethod;
70
71 fn clone_verification_method_ref(
72 verification_method: &ReferenceOrOwned<Self::VerificationMethod>,
73 ) -> ReferenceOrOwned<Self::VerificationMethod>;
74
75 fn clone_verification_method_ref_ref(
76 verification_method: ReferenceOrOwnedRef<Self::VerificationMethod>,
77 ) -> ReferenceOrOwned<Self::VerificationMethod>;
78
79 fn clone_proof_options(options: &Self::ProofOptions) -> Self::ProofOptions;
80
81 fn clone_signature(signature: &Self::Signature) -> Self::Signature;
82}
83
84impl<S: CryptographicSuite> CloneCryptographicSuite for S
85where
86 Self::PreparedClaims: Clone,
87 Self::VerificationMethod: Clone,
88 Self::ProofOptions: Clone,
89 Self::Signature: Clone,
90{
91 fn clone_prepared_claims(claims: &Self::PreparedClaims) -> Self::PreparedClaims {
92 claims.clone()
93 }
94
95 fn clone_verification_method(
96 verification_method: &Self::VerificationMethod,
97 ) -> Self::VerificationMethod {
98 verification_method.clone()
99 }
100
101 fn clone_verification_method_ref(
102 verification_method: &ReferenceOrOwned<Self::VerificationMethod>,
103 ) -> ReferenceOrOwned<Self::VerificationMethod> {
104 verification_method.clone()
105 }
106
107 fn clone_verification_method_ref_ref(
108 verification_method: ReferenceOrOwnedRef<Self::VerificationMethod>,
109 ) -> ReferenceOrOwned<Self::VerificationMethod> {
110 verification_method.cloned()
111 }
112
113 fn clone_proof_options(options: &Self::ProofOptions) -> Self::ProofOptions {
114 options.clone()
115 }
116
117 fn clone_signature(signature: &Self::Signature) -> Self::Signature {
118 signature.clone()
119 }
120}
121
122pub trait SerializeCryptographicSuite: CryptographicSuite {
123 fn serialize_type<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
124 self.type_().serialize(serializer)
125 }
126
127 fn serialize_verification_method<S: Serializer>(
128 verification_method: &Self::VerificationMethod,
129 serializer: S,
130 ) -> Result<S::Ok, S::Error>;
131
132 fn serialize_verification_method_ref<S: Serializer>(
133 verification_method: &ReferenceOrOwned<Self::VerificationMethod>,
134 serializer: S,
135 ) -> Result<S::Ok, S::Error>;
136
137 fn serialize_verification_method_ref_ref<S: Serializer>(
138 verification_method: &ReferenceOrOwnedRef<Self::VerificationMethod>,
139 serializer: S,
140 ) -> Result<S::Ok, S::Error>;
141
142 fn serialize_proof_options<S: Serializer>(
143 proof_options: &Self::ProofOptions,
144 serializer: S,
145 ) -> Result<S::Ok, S::Error>;
146
147 fn serialize_signature<S: Serializer>(
148 signature: &Self::Signature,
149 serializer: S,
150 ) -> Result<S::Ok, S::Error>;
151}
152
153impl<T: CryptographicSuite> SerializeCryptographicSuite for T
154where
155 Self::VerificationMethod: Serialize,
156 Self::ProofOptions: Serialize,
157 Self::Signature: Serialize,
158{
159 fn serialize_verification_method<S: Serializer>(
160 verification_method: &Self::VerificationMethod,
161 serializer: S,
162 ) -> Result<S::Ok, S::Error> {
163 verification_method.serialize(serializer)
164 }
165
166 fn serialize_verification_method_ref<S: Serializer>(
167 verification_method: &ReferenceOrOwned<Self::VerificationMethod>,
168 serializer: S,
169 ) -> Result<S::Ok, S::Error> {
170 verification_method.serialize(serializer)
171 }
172
173 fn serialize_verification_method_ref_ref<S: Serializer>(
174 verification_method: &ReferenceOrOwnedRef<Self::VerificationMethod>,
175 serializer: S,
176 ) -> Result<S::Ok, S::Error> {
177 verification_method.serialize(serializer)
178 }
179
180 fn serialize_proof_options<S: Serializer>(
181 proof_options: &Self::ProofOptions,
182 serializer: S,
183 ) -> Result<S::Ok, S::Error> {
184 proof_options.serialize(serializer)
185 }
186
187 fn serialize_signature<S: Serializer>(
188 signature: &Self::Signature,
189 serializer: S,
190 ) -> Result<S::Ok, S::Error> {
191 signature.serialize(serializer)
192 }
193}
194
195pub trait DeserializeCryptographicSuite<'de>: CryptographicSuite + TryFrom<Type> {
196 fn deserialize_verification_method<D: Deserializer<'de>>(
197 &self,
198 deserializer: D,
199 ) -> Result<Self::VerificationMethod, D::Error>;
200
201 fn deserialize_proof_options<D: Deserializer<'de>>(
202 &self,
203 deserializer: D,
204 ) -> Result<Self::ProofOptions, D::Error>;
205
206 fn deserialize_signature<D: Deserializer<'de>>(
207 &self,
208 deserializer: D,
209 ) -> Result<Self::Signature, D::Error>;
210}
211
212impl<'de, S: CryptographicSuite + TryFrom<Type>> DeserializeCryptographicSuite<'de> for S
213where
214 Self::VerificationMethod: DeserializeTyped<'de, S>,
215 Self::ProofOptions: DeserializeTyped<'de, S>,
216 Self::Signature: DeserializeTyped<'de, S>,
217{
218 fn deserialize_verification_method<D: Deserializer<'de>>(
219 &self,
220 deserializer: D,
221 ) -> Result<Self::VerificationMethod, D::Error> {
222 Self::VerificationMethod::deserialize_typed(self, deserializer)
223 }
224
225 fn deserialize_proof_options<D: Deserializer<'de>>(
226 &self,
227 deserializer: D,
228 ) -> Result<Self::ProofOptions, D::Error> {
229 Self::ProofOptions::deserialize_typed(self, deserializer)
230 }
231
232 fn deserialize_signature<D: Deserializer<'de>>(
233 &self,
234 deserializer: D,
235 ) -> Result<Self::Signature, D::Error> {
236 Self::Signature::deserialize_typed(self, deserializer)
237 }
238}
239
240pub trait DeserializeCryptographicSuiteOwned:
241 CryptographicSuite + for<'de> DeserializeCryptographicSuite<'de>
242{
243}
244
245impl<S> DeserializeCryptographicSuiteOwned for S where S: for<'de> DeserializeCryptographicSuite<'de>
246{}
247
248pub struct VerificationMethodOf<S: CryptographicSuite>(pub S::VerificationMethod);
249
250impl<S: CryptographicSuite> VerificationMethodOf<S> {
251 pub fn unwrap(self) -> S::VerificationMethod {
252 self.0
253 }
254}
255
256impl<'de, T: DeserializeCryptographicSuite<'de>> DeserializeTyped<'de, T>
257 for VerificationMethodOf<T>
258{
259 fn deserialize_typed<S>(type_: &T, deserializer: S) -> Result<Self, S::Error>
260 where
261 S: serde::Deserializer<'de>,
262 {
263 type_
264 .deserialize_verification_method(deserializer)
265 .map(Self)
266 }
267}
268
269pub struct VerificationMethodRefOf<'a, S: CryptographicSuite>(
270 pub ReferenceOrOwnedRef<'a, S::VerificationMethod>,
271);
272
273impl<S: DebugCryptographicSuite> fmt::Debug for VerificationMethodRefOf<'_, S> {
274 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
275 S::fmt_verification_method_ref(&self.0, f)
276 }
277}
278
279pub struct OptionsOf<S: CryptographicSuite>(pub S::ProofOptions);
280
281impl<'de, T: DeserializeCryptographicSuite<'de>> DeserializeTyped<'de, T> for OptionsOf<T> {
282 fn deserialize_typed<S>(type_: &T, deserializer: S) -> Result<Self, S::Error>
283 where
284 S: serde::Deserializer<'de>,
285 {
286 type_.deserialize_proof_options(deserializer).map(Self)
287 }
288}
289
290pub struct OptionsRefOf<'a, S: CryptographicSuite>(pub &'a S::ProofOptions);
291
292impl<S: DebugCryptographicSuite> fmt::Debug for OptionsRefOf<'_, S> {
293 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
294 S::fmt_proof_options(self.0, f)
295 }
296}
297
298pub struct SignatureOf<S: CryptographicSuite>(pub S::Signature);
299
300impl<'de, T: DeserializeCryptographicSuite<'de>> DeserializeTyped<'de, T> for SignatureOf<T> {
301 fn deserialize_typed<S>(type_: &T, deserializer: S) -> Result<Self, S::Error>
302 where
303 S: serde::Deserializer<'de>,
304 {
305 type_.deserialize_signature(deserializer).map(Self)
306 }
307}
308
309pub struct SignatureRefOf<'a, S: CryptographicSuite>(pub &'a S::Signature);
310
311impl<S: DebugCryptographicSuite> fmt::Debug for SignatureRefOf<'_, S> {
312 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
313 S::fmt_signature(self.0, f)
314 }
315}