Skip to content

Commit 8c284ca

Browse files
committed
Reorganize typed didcomm service models
Signed-off-by: Patrik Stas <[email protected]>
1 parent 4e67f62 commit 8c284ca

File tree

17 files changed

+157
-238
lines changed

17 files changed

+157
-238
lines changed

aries/aries_vcx/src/protocols/did_exchange/state_machine/helpers.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use base64::engine::general_purpose::URL_SAFE_NO_PAD;
55
use chrono::Utc;
66
use did_doc::schema::{
77
did_doc::DidDocument,
8-
service::{extra_fields::ServiceKeyKind, typed::didcommv1::ServiceDidCommV1, Service},
8+
service::{service_key_kind::ServiceKeyKind, typed::didcommv1::ServiceDidCommV1, Service},
99
types::uri::Uri,
1010
verification_method::{VerificationMethod, VerificationMethodType},
1111
};

aries/aries_vcx/src/utils/didcomm_utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use did_doc::schema::{
2-
did_doc::DidDocument, service::extra_fields::ServiceKeyKind,
2+
did_doc::DidDocument, service::service_key_kind::ServiceKeyKind,
33
verification_method::VerificationMethodType,
44
};
55
use public_key::Key;

did_core/did_doc/src/schema/legacy.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ pub fn deserialize_legacy_or_new_diddoc_str(val: String) -> Result<DidDocument,
205205
mod tests {
206206
use crate::schema::{
207207
did_doc::DidDocument, legacy::deserialize_legacy_or_new_diddoc_str,
208-
service::extra_fields::ServiceKeyKind,
208+
service::service_key_kind::ServiceKeyKind,
209209
};
210210

211211
const LEGACY_DID_DOC_JSON: &str = r#"

did_core/did_doc/src/schema/service/extra_fields/didcommv1.rs

-34
This file was deleted.

did_core/did_doc/src/schema/service/extra_fields/didcommv2.rs

-25
This file was deleted.

did_core/did_doc/src/schema/service/extra_fields/mod.rs

-150
This file was deleted.

did_core/did_doc/src/schema/service/mod.rs

+7-12
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,17 @@ use std::collections::HashMap;
33
use display_as_json::Display;
44
use serde::{Deserialize, Serialize};
55
use serde_json::Value;
6+
use service_accept_type::ServiceAcceptType;
7+
use service_key_kind::ServiceKeyKind;
68
use url::Url;
79

810
use crate::{
911
error::DidDocumentBuilderError,
10-
schema::{
11-
service::{
12-
extra_fields::{ServiceAcceptType, ServiceKeyKind},
13-
typed::ServiceType,
14-
},
15-
types::uri::Uri,
16-
utils::OneOrList,
17-
},
12+
schema::{service::typed::ServiceType, types::uri::Uri, utils::OneOrList},
1813
};
1914

20-
pub mod extra_fields;
15+
pub mod service_accept_type;
16+
pub mod service_key_kind;
2117
pub mod typed;
2218

2319
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Display)]
@@ -171,9 +167,8 @@ mod tests {
171167

172168
use crate::schema::{
173169
service::{
174-
extra_fields::{ServiceAcceptType, ServiceKeyKind},
175-
typed::ServiceType,
176-
Service,
170+
service_accept_type::ServiceAcceptType, service_key_kind::ServiceKeyKind,
171+
typed::ServiceType, Service,
177172
},
178173
types::uri::Uri,
179174
utils::OneOrList,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use std::fmt::Display;
2+
3+
use serde::{Deserialize, Deserializer, Serialize};
4+
5+
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
6+
pub enum ServiceAcceptType {
7+
DIDCommV1,
8+
DIDCommV2,
9+
Other(String),
10+
}
11+
12+
impl From<&str> for ServiceAcceptType {
13+
fn from(s: &str) -> Self {
14+
match s {
15+
"didcomm/aip2;env=rfc19" => ServiceAcceptType::DIDCommV1,
16+
"didcomm/v2" => ServiceAcceptType::DIDCommV2,
17+
_ => ServiceAcceptType::Other(s.to_string()),
18+
}
19+
}
20+
}
21+
22+
impl Display for ServiceAcceptType {
23+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24+
match self {
25+
ServiceAcceptType::DIDCommV1 => write!(f, "didcomm/aip2;env=rfc19"),
26+
ServiceAcceptType::DIDCommV2 => write!(f, "didcomm/v2"),
27+
ServiceAcceptType::Other(other) => write!(f, "{}", other),
28+
}
29+
}
30+
}
31+
32+
impl<'de> Deserialize<'de> for ServiceAcceptType {
33+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34+
where
35+
D: Deserializer<'de>,
36+
{
37+
let s = String::deserialize(deserializer)?;
38+
match s.as_str() {
39+
"didcomm/aip2;env=rfc19" => Ok(ServiceAcceptType::DIDCommV1),
40+
"didcomm/v2" => Ok(ServiceAcceptType::DIDCommV2),
41+
_ => Ok(ServiceAcceptType::Other(s)),
42+
}
43+
}
44+
}
45+
46+
impl Serialize for ServiceAcceptType {
47+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
48+
where
49+
S: serde::Serializer,
50+
{
51+
match self {
52+
ServiceAcceptType::DIDCommV1 => serializer.serialize_str("didcomm/aip2;env=rfc19"),
53+
ServiceAcceptType::DIDCommV2 => serializer.serialize_str("didcomm/v2"),
54+
ServiceAcceptType::Other(other) => serializer.serialize_str(other),
55+
}
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use std::fmt::Display;
2+
3+
use did_key::DidKey;
4+
use did_parser::DidUrl;
5+
use serde::{Deserialize, Serialize};
6+
7+
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
8+
#[serde(untagged)]
9+
pub enum ServiceKeyKind {
10+
DidKey(DidKey),
11+
Reference(DidUrl),
12+
Value(String),
13+
}
14+
15+
impl Display for ServiceKeyKind {
16+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17+
match self {
18+
ServiceKeyKind::Reference(did_url) => write!(f, "{}", did_url),
19+
ServiceKeyKind::Value(value) => write!(f, "{}", value),
20+
ServiceKeyKind::DidKey(did_key) => write!(f, "{}", did_key),
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)