1use serde::{de::DeserializeOwned, Serialize};
2use ssi_data_integrity::{CryptographicSuite, DataIntegrity};
3use ssi_jwt::{ClaimSet, RegisteredClaims};
4
5mod decode;
6mod encode;
7
8pub use decode::*;
9pub use encode::*;
10
11pub trait FromJwtClaims: Sized {
12 type Error;
13
14 fn from_jwt_claims(jwt: impl ClaimSet) -> Result<Self, Self::Error>;
15}
16
17pub trait ToJwtClaims {
18 type Error;
19
20 fn to_jwt_claims(&self) -> Result<RegisteredClaims, Self::Error>;
21}
22
23impl<S> FromJwtClaims for DataIntegrity<super::SpecializedJsonCredential, S>
24where
25 S: CryptographicSuite + TryFrom<ssi_data_integrity::Type>,
26 S::VerificationMethod: DeserializeOwned,
27 S::ProofOptions: DeserializeOwned,
28 S::Signature: DeserializeOwned,
29{
30 type Error = JwtVcDecodeError;
31
32 fn from_jwt_claims(jwt: impl ClaimSet) -> Result<Self, JwtVcDecodeError> {
37 decode_jwt_vc_claims(jwt)
38 }
39}
40
41impl<S: CryptographicSuite> ToJwtClaims for DataIntegrity<super::SpecializedJsonCredential, S>
42where
43 S::VerificationMethod: Serialize,
44 S::ProofOptions: Serialize,
45 S::Signature: Serialize,
46{
47 type Error = JwtVcEncodeError;
48
49 fn to_jwt_claims(&self) -> Result<RegisteredClaims, JwtVcEncodeError> {
54 encode_jwt_vc_claims(self)
55 }
56}
57
58impl ToJwtClaims for super::SpecializedJsonCredential {
59 type Error = JwtVcEncodeError;
60
61 fn to_jwt_claims(&self) -> Result<RegisteredClaims, JwtVcEncodeError> {
66 encode_jwt_vc_claims(self)
67 }
68}
69
70impl<C: DeserializeOwned, S> FromJwtClaims for DataIntegrity<super::JsonPresentation<C>, S>
71where
72 S: CryptographicSuite + TryFrom<ssi_data_integrity::Type>,
73 S::VerificationMethod: DeserializeOwned,
74 S::ProofOptions: DeserializeOwned,
75 S::Signature: DeserializeOwned,
76{
77 type Error = JwtVpDecodeError;
78
79 fn from_jwt_claims(jwt: impl ClaimSet) -> Result<Self, JwtVpDecodeError> {
84 decode_jwt_vp_claims(jwt)
85 }
86}
87
88impl<C: Serialize, S: CryptographicSuite> ToJwtClaims
89 for DataIntegrity<super::JsonPresentation<C>, S>
90where
91 S::VerificationMethod: Serialize,
92 S::ProofOptions: Serialize,
93 S::Signature: Serialize,
94{
95 type Error = JwtVpEncodeError;
96
97 fn to_jwt_claims(&self) -> Result<RegisteredClaims, JwtVpEncodeError> {
102 encode_jwt_vp_claims(self)
103 }
104}
105
106impl<C: Serialize> ToJwtClaims for super::JsonPresentation<C> {
107 type Error = JwtVpEncodeError;
108
109 fn to_jwt_claims(&self) -> Result<RegisteredClaims, JwtVpEncodeError> {
114 encode_jwt_vp_claims(self)
115 }
116}