Skip to content

Commit d769686

Browse files
committed
Feature/msg builders (#972)
* Added builders for messages crate --------- Signed-off-by: Bogdan Mircea <mirceapetrebogdan@gmail.com>
1 parent b152d04 commit d769686

File tree

82 files changed

+2026
-1499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+2026
-1499
lines changed

Cargo.lock

+22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

aries_vcx/src/common/ledger/transactions.rs

+25-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use bs58;
22
use diddoc_legacy::aries::diddoc::AriesDidDoc;
33
use diddoc_legacy::aries::service::AriesService;
4-
use messages::msg_fields::protocols::connection::invitation::Invitation;
4+
use messages::msg_fields::protocols::connection::invitation::{Invitation, InvitationContent};
55
use messages::msg_fields::protocols::out_of_band::invitation::OobService;
66
use std::{collections::HashMap, sync::Arc};
77

@@ -93,25 +93,35 @@ pub async fn add_new_did(
9393
pub async fn into_did_doc(indy_ledger: &Arc<dyn IndyLedgerRead>, invitation: &AnyInvitation) -> VcxResult<AriesDidDoc> {
9494
let mut did_doc: AriesDidDoc = AriesDidDoc::default();
9595
let (service_endpoint, recipient_keys, routing_keys) = match invitation {
96-
AnyInvitation::Con(Invitation::Public(invitation)) => {
97-
did_doc.set_id(invitation.content.did.to_string());
98-
let service = get_service(indy_ledger, &invitation.content.did)
99-
.await
100-
.unwrap_or_else(|err| {
101-
error!("Failed to obtain service definition from the ledger: {}", err);
102-
AriesService::default()
103-
});
96+
AnyInvitation::Con(Invitation {
97+
id,
98+
content: InvitationContent::Public(content),
99+
decorators,
100+
}) => {
101+
did_doc.set_id(content.did.to_string());
102+
let service = get_service(indy_ledger, &content.did).await.unwrap_or_else(|err| {
103+
error!("Failed to obtain service definition from the ledger: {}", err);
104+
AriesService::default()
105+
});
104106
(service.service_endpoint, service.recipient_keys, service.routing_keys)
105107
}
106-
AnyInvitation::Con(Invitation::Pairwise(invitation)) => {
107-
did_doc.set_id(invitation.id.clone());
108+
AnyInvitation::Con(Invitation {
109+
id,
110+
content: InvitationContent::Pairwise(content),
111+
decorators,
112+
}) => {
113+
did_doc.set_id(id.clone());
108114
(
109-
invitation.content.service_endpoint.clone(),
110-
invitation.content.recipient_keys.clone(),
111-
invitation.content.routing_keys.clone(),
115+
content.service_endpoint.clone(),
116+
content.recipient_keys.clone(),
117+
content.routing_keys.clone(),
112118
)
113119
}
114-
AnyInvitation::Con(Invitation::PairwiseDID(_)) => {
120+
AnyInvitation::Con(Invitation {
121+
id,
122+
content: InvitationContent::PairwiseDID(content),
123+
decorators,
124+
}) => {
115125
return Err(AriesVcxError::from_msg(
116126
AriesVcxErrorKind::InvalidDid,
117127
format!("PairwiseDID invitation not supported yet!"),

aries_vcx/src/handlers/connection/mediated_connection.rs

+23-16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use futures::future::BoxFuture;
99
use futures::stream::StreamExt;
1010
use messages::decorators::timing::Timing;
1111
use messages::msg_fields::protocols::basic_message::{BasicMessage, BasicMessageContent, BasicMessageDecorators};
12-
use messages::msg_fields::protocols::connection::invitation::Invitation;
12+
use messages::msg_fields::protocols::connection::invitation::InvitationContent;
1313
use messages::msg_fields::protocols::connection::request::Request;
1414
use messages::msg_fields::protocols::connection::Connection;
1515
use messages::msg_fields::protocols::discover_features::disclose::Disclose;
@@ -614,14 +614,16 @@ impl MediatedConnection {
614614
SmConnection::Invitee(sm_invitee) => {
615615
let (sm_invitee, can_autohop) = match message {
616616
Some(message) => match message {
617-
AriesMessage::Connection(Connection::Invitation(Invitation::Public(invitation))) => (
618-
sm_invitee.handle_invitation(AnyInvitation::Con(Invitation::Public(invitation)))?,
619-
false,
620-
),
621-
AriesMessage::Connection(Connection::Invitation(Invitation::Pairwise(invitation))) => (
622-
sm_invitee.handle_invitation(AnyInvitation::Con(Invitation::Pairwise(invitation)))?,
623-
false,
624-
),
617+
AriesMessage::Connection(Connection::Invitation(invitation))
618+
if matches!(invitation.content, InvitationContent::Public(_)) =>
619+
{
620+
(sm_invitee.handle_invitation(AnyInvitation::Con(invitation))?, false)
621+
}
622+
AriesMessage::Connection(Connection::Invitation(invitation))
623+
if matches!(invitation.content, InvitationContent::Pairwise(_)) =>
624+
{
625+
(sm_invitee.handle_invitation(AnyInvitation::Con(invitation))?, false)
626+
}
625627
AriesMessage::Connection(Connection::Response(response)) => {
626628
let send_message = self.send_message_closure_connection(Arc::clone(wallet));
627629
(
@@ -807,15 +809,20 @@ impl MediatedConnection {
807809
Err(_) => {
808810
let now = Utc::now();
809811

810-
let content = BasicMessageContent::new(message.to_owned(), now);
811-
812-
let mut decorators = BasicMessageDecorators::default();
813-
let mut timing = Timing::default();
814-
timing.out_time = Some(now);
812+
let content = BasicMessageContent::builder()
813+
.content(message.to_owned())
814+
.sent_time(now)
815+
.build();
815816

816-
decorators.timing = Some(timing);
817+
let decorators = BasicMessageDecorators::builder()
818+
.timing(Timing::builder().out_time(now).build())
819+
.build();
817820

818-
BasicMessage::with_decorators(Uuid::new_v4().to_string(), content, decorators).into()
821+
BasicMessage::builder()
822+
.id(Uuid::new_v4().to_string())
823+
.content(content)
824+
.decorators(decorators)
825+
.build()
819826
}
820827
}
821828
}

aries_vcx/src/handlers/discovery/mod.rs

+26-14
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,25 @@ pub async fn send_discovery_query(
2121
pw_vk: &str,
2222
) -> VcxResult<()> {
2323
let query = query.unwrap_or("*".to_owned());
24-
let mut content = QueryContent::new(query);
25-
content.comment = comment;
24+
let content = QueryContent::builder().query(query);
2625

27-
let mut decorators = QueryDecorators::default();
28-
let mut timing = Timing::default();
29-
timing.out_time = Some(Utc::now());
30-
decorators.timing = Some(timing);
26+
let content = if let Some(comment) = comment {
27+
content.comment(comment).build()
28+
} else {
29+
content.build()
30+
};
3131

32-
let query = Query::with_decorators(Uuid::new_v4().to_string(), content, decorators);
32+
let decorators = QueryDecorators::builder()
33+
.timing(Timing::builder().out_time(Utc::now()).build())
34+
.build();
3335

34-
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), query.into()).await
36+
let query = Query::builder()
37+
.id(Uuid::new_v4().to_string())
38+
.content(content)
39+
.decorators(decorators)
40+
.build();
41+
42+
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), query).await
3543
}
3644

3745
pub async fn respond_discovery_query(
@@ -43,12 +51,16 @@ pub async fn respond_discovery_query(
4351
) -> VcxResult<()> {
4452
let content = DiscloseContent::default();
4553

46-
let mut decorators = DiscloseDecorators::new(Thread::new(query.id));
47-
let mut timing = Timing::default();
48-
timing.out_time = Some(Utc::now());
49-
decorators.timing = Some(timing);
54+
let decorators = DiscloseDecorators::builder()
55+
.thread(Thread::builder().thid(query.id).build())
56+
.timing(Timing::builder().out_time(Utc::now()).build())
57+
.build();
5058

51-
let disclose = Disclose::with_decorators(Uuid::new_v4().to_string(), content, decorators);
59+
let disclose = Disclose::builder()
60+
.id(Uuid::new_v4().to_string())
61+
.content(content)
62+
.decorators(decorators)
63+
.build();
5264

53-
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), disclose.into()).await
65+
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), disclose).await
5466
}

aries_vcx/src/handlers/issuance/holder.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use messages::msg_fields::protocols::cred_issuance::offer_credential::OfferCrede
1313
use messages::msg_fields::protocols::cred_issuance::propose_credential::ProposeCredential;
1414
use messages::msg_fields::protocols::cred_issuance::request_credential::RequestCredential;
1515
use messages::msg_fields::protocols::cred_issuance::CredentialIssuance;
16-
use messages::msg_fields::protocols::notification::ack::{AckDecorators, AckStatus};
16+
use messages::msg_fields::protocols::notification::ack::{AckContent, AckDecorators, AckStatus};
1717
use messages::msg_fields::protocols::report_problem::ProblemReport;
1818
use messages::msg_fields::protocols::revocation::revoke::Revoke;
1919
use messages::AriesMessage;
@@ -25,13 +25,19 @@ use crate::handlers::revocation_notification::receiver::RevocationNotificationRe
2525
use crate::protocols::issuance::holder::state_machine::{HolderFullState, HolderSM, HolderState};
2626

2727
fn build_credential_ack(thread_id: &str) -> AckCredential {
28-
let content = AckCredentialContent::new(AckStatus::Ok);
29-
let mut decorators = AckDecorators::new(Thread::new(thread_id.to_owned()));
30-
let mut timing = Timing::default();
31-
timing.out_time = Some(Utc::now());
32-
decorators.timing = Some(timing);
33-
34-
AckCredential::with_decorators(Uuid::new_v4().to_string(), content, decorators)
28+
let content = AckCredentialContent::builder()
29+
.inner(AckContent::builder().status(AckStatus::Ok).build())
30+
.build();
31+
let decorators = AckDecorators::builder()
32+
.thread(Thread::builder().thid(thread_id.to_owned()).build())
33+
.timing(Timing::builder().out_time(Utc::now()).build())
34+
.build();
35+
36+
AckCredential::builder()
37+
.id(Uuid::new_v4().to_string())
38+
.content(content)
39+
.decorators(decorators)
40+
.build()
3541
}
3642

3743
#[derive(Serialize, Deserialize, Debug, Clone)]

aries_vcx/src/handlers/issuance/issuer.rs

+42-49
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use aries_vcx_core::ledger::base_ledger::AnoncredsLedgerRead;
1111
use messages::msg_fields::protocols::cred_issuance::issue_credential::IssueCredential;
1212
use messages::msg_fields::protocols::notification::Notification;
1313
use messages::msg_fields::protocols::report_problem::ProblemReport;
14-
use messages::msg_parts::MsgParts;
1514

1615
use crate::errors::error::prelude::*;
1716
use crate::handlers::util::OfferInfo;
@@ -46,7 +45,7 @@ fn _build_credential_preview(credential_json: &str) -> VcxResult<CredentialPrevi
4645
})?;
4746

4847
// todo: should throw err if cred_values is not serde_json::Value::Array or serde_json::Value::Object
49-
let mut credential_preview = CredentialPreview::new(Vec::new());
48+
let mut attributes = Vec::new();
5049

5150
match cred_values {
5251
serde_json::Value::Array(cred_values) => {
@@ -60,48 +59,54 @@ fn _build_credential_preview(credential_json: &str) -> VcxResult<CredentialPrevi
6059
format!("No 'value' field in cred_value: {:?}", cred_value),
6160
))?;
6261

63-
let mut attr = CredentialAttr::new(
64-
key.as_str()
65-
.ok_or(AriesVcxError::from_msg(
66-
AriesVcxErrorKind::InvalidOption,
67-
"Credential value names are currently only allowed to be strings",
68-
))?
69-
.to_owned(),
70-
value
71-
.as_str()
72-
.ok_or(AriesVcxError::from_msg(
73-
AriesVcxErrorKind::InvalidOption,
74-
"Credential values are currently only allowed to be strings",
75-
))?
76-
.to_owned(),
77-
);
78-
79-
attr.mime_type = Some(MimeType::Plain);
80-
credential_preview.attributes.push(attr);
62+
let name = key
63+
.as_str()
64+
.ok_or(AriesVcxError::from_msg(
65+
AriesVcxErrorKind::InvalidOption,
66+
"Credential value names are currently only allowed to be strings",
67+
))?
68+
.to_owned();
69+
70+
let value = value
71+
.as_str()
72+
.ok_or(AriesVcxError::from_msg(
73+
AriesVcxErrorKind::InvalidOption,
74+
"Credential values are currently only allowed to be strings",
75+
))?
76+
.to_owned();
77+
78+
let attr = CredentialAttr::builder()
79+
.name(name)
80+
.value(value)
81+
.mime_type(MimeType::Plain)
82+
.build();
83+
84+
attributes.push(attr);
8185
}
8286
}
8387
serde_json::Value::Object(values_map) => {
8488
for item in values_map.iter() {
8589
let (key, value) = item;
86-
87-
let mut attr = CredentialAttr::new(
88-
key.to_owned(),
89-
value
90-
.as_str()
91-
.ok_or(AriesVcxError::from_msg(
92-
AriesVcxErrorKind::InvalidOption,
93-
"Credential values are currently only allowed to be strings",
94-
))?
95-
.to_owned(),
96-
);
97-
98-
attr.mime_type = Some(MimeType::Plain);
99-
credential_preview.attributes.push(attr);
90+
let value = value
91+
.as_str()
92+
.ok_or(AriesVcxError::from_msg(
93+
AriesVcxErrorKind::InvalidOption,
94+
"Credential values are currently only allowed to be strings",
95+
))?
96+
.to_owned();
97+
let attr = CredentialAttr::builder()
98+
.name(key.to_owned())
99+
.value(value)
100+
.mime_type(MimeType::Plain)
101+
.build();
102+
103+
attributes.push(attr);
100104
}
101105
}
102106
_ => {}
103107
};
104-
Ok(credential_preview)
108+
109+
Ok(CredentialPreview::new(attributes))
105110
}
106111

107112
impl Issuer {
@@ -279,22 +284,10 @@ impl Issuer {
279284
}
280285
AriesMessage::ReportProblem(report) => self.issuer_sm.clone().receive_problem_report(report)?,
281286
AriesMessage::Notification(Notification::ProblemReport(report)) => {
282-
let MsgParts {
283-
id,
284-
content,
285-
decorators,
286-
} = report;
287-
let report = ProblemReport::with_decorators(id, content.0, decorators);
288-
self.issuer_sm.clone().receive_problem_report(report)?
287+
self.issuer_sm.clone().receive_problem_report(report.into())?
289288
}
290289
AriesMessage::CredentialIssuance(CredentialIssuance::ProblemReport(report)) => {
291-
let MsgParts {
292-
id,
293-
content,
294-
decorators,
295-
} = report;
296-
let report = ProblemReport::with_decorators(id, content.0, decorators);
297-
self.issuer_sm.clone().receive_problem_report(report)?
290+
self.issuer_sm.clone().receive_problem_report(report.into())?
298291
}
299292
_ => self.issuer_sm.clone(),
300293
};

0 commit comments

Comments
 (0)