Skip to content

Commit e97b01e

Browse files
authored
Unify core and custom profiles under one type (#26)
* Unify core and custom profiles under one type * Add doc comments
1 parent 17b3702 commit e97b01e

35 files changed

+224
-78
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ anyhow = "1.0.86"
3333
sha2 = "0.10.8"
3434
form_urlencoded = "1.2.1"
3535
percent-encoding = "2.3.1"
36+
serde_cbor = "0.11.2"
3637

3738
[dev-dependencies]
3839
assert-json-diff = "2.0.2"

src/authorization.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,11 @@ mod test {
116116
use serde_json::json;
117117

118118
use crate::{
119-
core::{
119+
metadata::AuthorizationServerMetadata,
120+
profiles::core::{
120121
metadata::CredentialIssuerMetadata,
121122
profiles::{jwt_vc_json, CoreProfilesAuthorizationDetailsObject},
122123
},
123-
metadata::AuthorizationServerMetadata,
124124
types::CredentialUrl,
125125
};
126126

@@ -193,7 +193,7 @@ mod test {
193193

194194
#[test]
195195
fn example_authorization_details_multiple() {
196-
let _: Vec<crate::core::authorization::AuthorizationDetailsObject> =
196+
let _: Vec<crate::profiles::core::authorization::AuthorizationDetailsObject> =
197197
serde_json::from_value(json!([
198198
{
199199
"type":"openid_credential",
@@ -238,7 +238,7 @@ mod test {
238238
AuthUrl::new("https://server.example.com/authorize".into()).unwrap(),
239239
));
240240

241-
let client = crate::core::client::Client::from_issuer_metadata(
241+
let client = crate::profiles::core::client::Client::from_issuer_metadata(
242242
ClientId::new("s6BhdRkqt3".to_string()),
243243
RedirectUrl::new("https://client.example.org/cb".into()).unwrap(),
244244
credential_issuer_metadata,
@@ -259,9 +259,10 @@ mod test {
259259
let authorization_details = vec![AuthorizationDetailsObject {
260260
r#type: AuthorizationDetailsObjectType::OpenidCredential,
261261
additional_profile_fields: CoreProfilesAuthorizationDetailsObject::WithFormat {
262-
inner: crate::core::profiles::AuthorizationDetailsObjectWithFormat::JwtVcJson(
263-
authorization_detail,
264-
),
262+
inner:
263+
crate::profiles::core::profiles::AuthorizationDetailsObjectWithFormat::JwtVcJson(
264+
authorization_detail,
265+
),
265266
_credential_identifier: (),
266267
},
267268
locations: vec![],

src/core/profiles/mso_mdoc/credential_response.rs

-10
This file was deleted.

src/credential.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,13 @@ pub struct DeferredRequest {
453453
mod test {
454454
use serde_json::json;
455455

456-
use crate::core::profiles::CoreProfilesCredentialResponse;
456+
use crate::profiles::core::profiles::CoreProfilesCredentialResponse;
457457

458458
use super::*;
459459

460460
#[test]
461461
fn example_credential_request_object() {
462-
let _: crate::core::credential::Request = serde_json::from_value(json!({
462+
let _: crate::profiles::core::credential::Request = serde_json::from_value(json!({
463463
"format": "jwt_vc_json",
464464
"credential_definition": {
465465
"type": [
@@ -480,7 +480,7 @@ mod test {
480480

481481
#[test]
482482
fn example_credential_request_referenced() {
483-
let _: crate::core::credential::Request = serde_json::from_value(json!({
483+
let _: crate::profiles::core::credential::Request = serde_json::from_value(json!({
484484
"credential_identifier": "UniversityDegreeCredential",
485485
"proof": {
486486
"proof_type": "jwt",
@@ -496,7 +496,7 @@ mod test {
496496
#[test]
497497
fn example_credential_request_deny() {
498498
assert!(
499-
serde_json::from_value::<crate::core::credential::Request>(json!({
499+
serde_json::from_value::<crate::profiles::core::credential::Request>(json!({
500500
"format": "jwt_vc_json",
501501
"credential_identifier": "UniversityDegreeCredential",
502502
"proof": {
@@ -545,7 +545,7 @@ mod test {
545545

546546
#[test]
547547
fn example_batch_request() {
548-
let _: crate::core::credential::BatchRequest = serde_json::from_value(json!({
548+
let _: crate::profiles::core::credential::BatchRequest = serde_json::from_value(json!({
549549
"credential_requests":[
550550
{
551551
"format":"jwt_vc_json",

src/lib.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ mod macros;
33

44
pub mod authorization;
55
pub mod client;
6-
pub mod core;
76
pub mod credential;
87
pub mod credential_offer;
98
pub mod credential_response_encryption;
10-
pub mod custom;
119
mod deny_field;
1210
mod http_utils;
1311
pub mod metadata;
@@ -23,15 +21,15 @@ pub use oauth2;
2321

2422
#[cfg(test)]
2523
mod test {
26-
use crate::core::profiles::{
27-
jwt_vc_json_ld, ldp_vc, CoreProfilesCredentialConfiguration, CoreProfilesCredentialRequest,
28-
CredentialRequestWithFormat,
29-
};
30-
use crate::core::{client::Client, metadata::CredentialIssuerMetadata};
3124
use crate::credential_offer::CredentialOffer;
3225
use crate::metadata::authorization_server::GrantType;
3326
use crate::metadata::credential_issuer::CredentialConfiguration;
3427
use crate::metadata::{AuthorizationServerMetadata, MetadataDiscovery};
28+
use crate::profiles::core::profiles::{
29+
jwt_vc_json_ld, ldp_vc, CoreProfilesCredentialConfiguration, CoreProfilesCredentialRequest,
30+
CredentialRequestWithFormat,
31+
};
32+
use crate::profiles::core::{client::Client, metadata::CredentialIssuerMetadata};
3533
use crate::types::CredentialOfferRequest;
3634
use oauth2::{ClientId, RedirectUrl, TokenResponse};
3735
use url::Url;

src/metadata/credential_issuer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ impl MetadataBackgroundImage {
269269

270270
#[cfg(test)]
271271
mod test {
272-
use crate::core::profiles::CoreProfilesCredentialConfiguration;
272+
use crate::profiles::core::profiles::CoreProfilesCredentialConfiguration;
273273
use serde_json::json;
274274

275275
use super::*;

src/profiles.rs

-18
This file was deleted.
File renamed without changes.

src/core/profiles/jwt_vc_json/authorization_detail.rs src/profiles/core/profiles/jwt_vc_json/authorization_detail.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use std::collections::HashMap;
33
use serde::{Deserialize, Serialize};
44

55
use crate::{
6-
core::profiles::AuthorizationDetailsObjectClaim, profiles::AuthorizationDetailsObjectProfile,
6+
profiles::core::profiles::AuthorizationDetailsObjectClaim,
7+
profiles::AuthorizationDetailsObjectProfile,
78
};
89

910
use super::{CredentialSubjectClaims, Format};
@@ -83,7 +84,7 @@ mod test {
8384

8485
use crate::{
8586
authorization::AuthorizationDetailsObject,
86-
core::profiles::CoreProfilesAuthorizationDetailsObject,
87+
profiles::core::profiles::CoreProfilesAuthorizationDetailsObject,
8788
};
8889

8990
#[test]

src/core/profiles/jwt_vc_json/credential_configuration.rs src/profiles/core/profiles/jwt_vc_json/credential_configuration.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use std::collections::HashMap;
33
use serde::{Deserialize, Serialize};
44

55
use crate::{
6-
core::profiles::CredentialConfigurationClaim, profiles::CredentialConfigurationProfile,
6+
profiles::core::profiles::CredentialConfigurationClaim,
7+
profiles::CredentialConfigurationProfile,
78
};
89

910
use super::{CredentialSubjectClaims, Format};

src/core/profiles/jwt_vc_json/credential_request.rs src/profiles/core/profiles/jwt_vc_json/credential_request.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl CredentialRequestProfile for CredentialRequest {
5151
mod test {
5252
use serde_json::json;
5353

54-
use crate::{core::profiles::CoreProfilesCredentialRequest, credential::Request};
54+
use crate::{credential::Request, profiles::core::profiles::CoreProfilesCredentialRequest};
5555

5656
#[test]
5757
fn roundtrip_with_format() {

src/core/profiles/ldp_vc/authorization_detail.rs src/profiles/core/profiles/ldp_vc/authorization_detail.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize};
55
use serde_json::Value;
66

77
use crate::{
8-
core::profiles::AuthorizationDetailsObjectClaim, profiles::AuthorizationDetailsObjectProfile,
8+
profiles::core::profiles::AuthorizationDetailsObjectClaim,
9+
profiles::AuthorizationDetailsObjectProfile,
910
};
1011

1112
use super::CredentialSubjectClaims;
@@ -91,7 +92,7 @@ mod test {
9192

9293
use crate::{
9394
authorization::AuthorizationDetailsObject,
94-
core::profiles::{ldp_vc::Format, CoreProfilesAuthorizationDetailsObject},
95+
profiles::core::profiles::{ldp_vc::Format, CoreProfilesAuthorizationDetailsObject},
9596
};
9697

9798
#[test]

src/core/profiles/ldp_vc/credential_configuration.rs src/profiles/core/profiles/ldp_vc/credential_configuration.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use serde::{de::DeserializeOwned, Deserialize, Serialize};
55
use serde_json::Value;
66

77
use crate::{
8-
core::profiles::CredentialConfigurationClaim, profiles::CredentialConfigurationProfile,
8+
profiles::core::profiles::CredentialConfigurationClaim,
9+
profiles::CredentialConfigurationProfile,
910
};
1011

1112
use super::CredentialSubjectClaims;
@@ -65,7 +66,8 @@ mod test {
6566
use serde_json::json;
6667

6768
use crate::{
68-
core::profiles::ldp_vc::Format, metadata::credential_issuer::CredentialConfiguration,
69+
metadata::credential_issuer::CredentialConfiguration,
70+
profiles::core::profiles::ldp_vc::Format,
6971
};
7072

7173
#[test]

src/core/profiles/ldp_vc/credential_request.rs src/profiles/core/profiles/ldp_vc/credential_request.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ mod test {
6060
use serde_json::json;
6161

6262
use crate::{
63-
core::profiles::{ldp_vc::Format, CoreProfilesCredentialRequest},
6463
credential::Request,
64+
profiles::core::profiles::{ldp_vc::Format, CoreProfilesCredentialRequest},
6565
};
6666

6767
#[test]

src/core/profiles/ldp_vc/credential_response.rs src/profiles/core/profiles/ldp_vc/credential_response.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use serde::{Deserialize, Serialize};
2-
use serde_json::Value;
2+
use ssi::prelude::{AnySuite, DataIntegrity, DataIntegrityDocument};
33

44
use crate::profiles::CredentialResponseProfile;
55

66
#[derive(Clone, Debug, Deserialize, Serialize)]
77
pub struct CredentialResponse;
88

99
impl CredentialResponseProfile for CredentialResponse {
10-
type Type = Value;
10+
type Type = DataIntegrity<DataIntegrityDocument, AnySuite>;
1111
}
1212

1313
#[cfg(test)]
File renamed without changes.
File renamed without changes.

src/core/profiles/mso_mdoc/authorization_detail.rs src/profiles/core/profiles/mso_mdoc/authorization_detail.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use isomdl::definitions::device_request::DocType;
44
use serde::{Deserialize, Serialize};
55

66
use crate::{
7-
core::profiles::AuthorizationDetailsObjectClaim, profiles::AuthorizationDetailsObjectProfile,
7+
profiles::core::profiles::AuthorizationDetailsObjectClaim,
8+
profiles::AuthorizationDetailsObjectProfile,
89
};
910

1011
use super::{Claims, Format};
@@ -60,7 +61,7 @@ mod test {
6061

6162
use crate::{
6263
authorization::AuthorizationDetailsObject,
63-
core::profiles::CoreProfilesAuthorizationDetailsObject,
64+
profiles::core::profiles::CoreProfilesAuthorizationDetailsObject,
6465
};
6566

6667
#[test]

src/core/profiles/mso_mdoc/credential_configuration.rs src/profiles/core/profiles/mso_mdoc/credential_configuration.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use isomdl::definitions::device_request::DocType;
22
use serde::{Deserialize, Serialize};
33

44
use crate::{
5-
core::profiles::CredentialConfigurationClaim, profiles::CredentialConfigurationProfile,
5+
profiles::core::profiles::CredentialConfigurationClaim,
6+
profiles::CredentialConfigurationProfile,
67
};
78

89
use super::{Claims, Format};

src/core/profiles/mso_mdoc/credential_request.rs src/profiles/core/profiles/mso_mdoc/credential_request.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use isomdl::definitions::device_request::DocType;
22
use serde::{Deserialize, Serialize};
33

4-
use crate::{core::profiles::CredentialConfigurationClaim, profiles::CredentialRequestProfile};
4+
use crate::{
5+
profiles::core::profiles::CredentialConfigurationClaim, profiles::CredentialRequestProfile,
6+
};
57

68
use super::{Claims, Format};
79

@@ -70,7 +72,7 @@ impl CredentialRequestProfile for CredentialRequest {
7072
mod test {
7173
use serde_json::json;
7274

73-
use crate::{core::profiles::CoreProfilesCredentialRequest, credential::Request};
75+
use crate::{credential::Request, profiles::core::profiles::CoreProfilesCredentialRequest};
7476

7577
#[test]
7678
fn roundtrip_with_format() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use isomdl::definitions::IssuerSigned;
2+
use serde::{Deserialize, Serialize};
3+
4+
use crate::profiles::CredentialResponseProfile;
5+
6+
#[derive(Clone, Debug, Deserialize, Serialize)]
7+
pub struct CredentialResponse;
8+
9+
impl CredentialResponseProfile for CredentialResponse {
10+
type Type = IsoIssuerSigned;
11+
}
12+
13+
#[derive(Clone, Debug, Deserialize, Serialize)]
14+
pub struct IsoIssuerSigned(#[serde(with = "base64_cbor")] IssuerSigned);
15+
16+
mod base64_cbor {
17+
use base64::{engine::general_purpose::URL_SAFE, Engine};
18+
use serde::{de::DeserializeOwned, Deserialize, Deserializer, Serialize, Serializer};
19+
20+
pub fn serialize<T: Sized + Serialize, S: Serializer>(v: &T, s: S) -> Result<S::Ok, S::Error> {
21+
let v = match serde_cbor::to_vec(v) {
22+
Ok(v) => v,
23+
Err(e) => return Err(serde::ser::Error::custom(e)),
24+
};
25+
let b64 = URL_SAFE.encode(v);
26+
String::serialize(&b64, s)
27+
}
28+
29+
pub fn deserialize<'de, T: DeserializeOwned, D: Deserializer<'de>>(
30+
d: D,
31+
) -> Result<T, D::Error> {
32+
let b64 = String::deserialize(d)?;
33+
match URL_SAFE.decode(b64) {
34+
Ok(v) => match serde_cbor::from_slice(&v) {
35+
Ok(v) => Ok(v),
36+
Err(e) => Err(serde::de::Error::custom(e)),
37+
},
38+
Err(e) => Err(serde::de::Error::custom(e)),
39+
}
40+
}
41+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/custom/profiles/vc_sd_jwt/authorization_detail.rs src/profiles/custom/profiles/vc_sd_jwt/authorization_detail.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use serde::{Deserialize, Serialize};
22

3-
use crate::{
4-
core::profiles::CredentialConfigurationClaim, profiles::AuthorizationDetailsObjectProfile,
3+
use crate::profiles::custom::profiles::{
4+
AuthorizationDetailsObjectProfile, CredentialConfigurationClaim,
55
};
66

77
use super::{Claims, Format};

src/custom/profiles/vc_sd_jwt/credential_configuration.rs src/profiles/custom/profiles/vc_sd_jwt/credential_configuration.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use serde::{Deserialize, Serialize};
22

33
use crate::{
4-
core::profiles::CredentialConfigurationClaim, profiles::CredentialConfigurationProfile,
4+
profiles::custom::profiles::CredentialConfigurationClaim,
5+
profiles::CredentialConfigurationProfile,
56
};
67

78
use super::{Claims, Format};

0 commit comments

Comments
 (0)