ssi_data_integrity/any/
options.rs1use serde::{Deserialize, Serialize};
2use ssi_data_integrity_core::ProofOptions;
3use ssi_jwk::JWK;
4use ssi_verification_methods::AnyMethod;
5
6pub type AnyInputOptions = ProofOptions<AnyMethod, AnyInputSuiteOptions>;
7
8#[derive(Debug, Clone, Default, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct AnyInputSuiteOptions {
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub public_key_jwk: Option<Box<JWK>>,
14
15 #[cfg(all(feature = "w3c", feature = "eip712"))]
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub eip712: Option<ssi_data_integrity_suites::ethereum_eip712_signature_2021::Eip712Options>,
18}
19
20impl AnyInputSuiteOptions {
21 pub fn new() -> Self {
22 Self::default()
23 }
24
25 pub fn with_public_key(self, jwk: JWK) -> Result<Self, ssi_jws::Error> {
26 #[allow(clippy::needless_update)]
27 Ok(Self {
28 public_key_jwk: Some(Box::new(jwk)),
29 ..self
30 })
31 }
32}
33
34impl From<AnyInputSuiteOptions> for () {
35 fn from(_: AnyInputSuiteOptions) -> Self {}
36}
37
38impl From<()> for AnyInputSuiteOptions {
39 fn from(_: ()) -> Self {
40 Self::default()
41 }
42}
43
44#[cfg(all(feature = "w3c", feature = "eip712"))]
45impl From<Option<ssi_data_integrity_suites::ethereum_eip712_signature_2021::Eip712Options>>
46 for AnyInputSuiteOptions
47{
48 fn from(
49 value: Option<ssi_data_integrity_suites::ethereum_eip712_signature_2021::Eip712Options>,
50 ) -> Self {
51 Self {
52 eip712: value.clone(),
53 ..Default::default()
54 }
55 }
56}
57
58#[cfg(all(feature = "w3c", feature = "eip712"))]
59impl From<AnyInputSuiteOptions>
60 for ssi_data_integrity_suites::ethereum_eip712_signature_2021::Options
61{
62 fn from(value: AnyInputSuiteOptions) -> Self {
63 Self {
64 eip712: value.eip712,
65 }
66 }
67}
68
69#[cfg(all(feature = "w3c", feature = "eip712"))]
70impl From<ssi_data_integrity_suites::ethereum_eip712_signature_2021::Options>
71 for AnyInputSuiteOptions
72{
73 fn from(value: ssi_data_integrity_suites::ethereum_eip712_signature_2021::Options) -> Self {
74 Self {
75 eip712: value.eip712,
76 ..Default::default()
77 }
78 }
79}
80
81#[cfg(all(feature = "w3c", feature = "eip712"))]
82impl From<AnyInputSuiteOptions>
83 for ssi_data_integrity_suites::ethereum_eip712_signature_2021::v0_1::Options
84{
85 fn from(value: AnyInputSuiteOptions) -> Self {
86 Self {
87 eip712: value.eip712.map(Into::into),
88 }
89 }
90}
91
92#[cfg(all(feature = "w3c", feature = "eip712"))]
93impl From<ssi_data_integrity_suites::ethereum_eip712_signature_2021::v0_1::Options>
94 for AnyInputSuiteOptions
95{
96 fn from(
97 value: ssi_data_integrity_suites::ethereum_eip712_signature_2021::v0_1::Options,
98 ) -> Self {
99 Self {
100 eip712: value.eip712.map(Into::into),
101 ..Default::default()
102 }
103 }
104}
105
106#[cfg(feature = "tezos")]
107impl TryFrom<AnyInputSuiteOptions> for ssi_data_integrity_suites::tezos::Options {
108 type Error = ssi_data_integrity_core::suite::ConfigurationError;
109
110 fn try_from(value: AnyInputSuiteOptions) -> Result<Self, Self::Error> {
111 Ok(Self {
112 public_key_jwk: value.public_key_jwk.ok_or(
113 ssi_data_integrity_core::suite::ConfigurationError::MissingOption(
114 "publicKeyJwk".to_string(),
115 ),
116 )?,
117 })
118 }
119}
120
121#[cfg(feature = "tezos")]
122impl From<ssi_data_integrity_suites::tezos::Options> for AnyInputSuiteOptions {
123 fn from(value: ssi_data_integrity_suites::tezos::Options) -> Self {
124 Self {
125 public_key_jwk: Some(value.public_key_jwk),
126 ..Default::default()
127 }
128 }
129}
130
131#[cfg(feature = "tezos")]
132impl TryFrom<AnyInputSuiteOptions> for ssi_data_integrity_suites::tezos_signature_2021::Options {
133 type Error = ssi_data_integrity_core::suite::ConfigurationError;
134
135 fn try_from(value: AnyInputSuiteOptions) -> Result<Self, Self::Error> {
136 Ok(Self {
137 public_key_jwk: value.public_key_jwk,
138 })
139 }
140}
141
142#[cfg(feature = "tezos")]
143impl From<ssi_data_integrity_suites::tezos_signature_2021::Options> for AnyInputSuiteOptions {
144 fn from(value: ssi_data_integrity_suites::tezos_signature_2021::Options) -> Self {
145 Self {
146 public_key_jwk: value.public_key_jwk,
147 ..Default::default()
148 }
149 }
150}
151
152#[cfg(feature = "tezos")]
153impl TryFrom<AnyInputSuiteOptions>
154 for ssi_data_integrity_suites::tezos::tezos_jcs_signature_2021::Options
155{
156 type Error = ssi_data_integrity_core::suite::ConfigurationError;
157
158 fn try_from(value: AnyInputSuiteOptions) -> Result<Self, Self::Error> {
159 Ok(Self {
160 public_key_multibase: value
161 .public_key_jwk
162 .as_deref()
163 .map(ssi_data_integrity_suites::tezos::encode_jwk_to_multibase)
164 .transpose()
165 .map_err(ssi_data_integrity_core::suite::ConfigurationError::other)?,
166 })
167 }
168}
169
170#[cfg(feature = "tezos")]
171impl From<ssi_data_integrity_suites::tezos::tezos_jcs_signature_2021::Options>
172 for AnyInputSuiteOptions
173{
174 fn from(value: ssi_data_integrity_suites::tezos::tezos_jcs_signature_2021::Options) -> Self {
175 Self {
176 public_key_jwk: value
177 .public_key_multibase
178 .and_then(|key| {
179 ssi_data_integrity_suites::tezos::decode_jwk_from_multibase(&key).ok()
180 })
181 .map(Box::new),
182 ..Default::default()
183 }
184 }
185}