Skip to content

Commit 0d639eb

Browse files
committed
feat(rust/signed-doc): add Builder type for signed documents
1 parent 5d6de03 commit 0d639eb

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

rust/signed_doc/src/builder.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//! Catalyst Signed Document Builder.
2+
use crate::{CatalystSignedDocument, Content, InnerCatalystSignedDocument, Metadata, Signatures};
3+
4+
/// Catalyst Signed Document Builder.
5+
#[derive(Debug, Default)]
6+
#[allow(dead_code)]
7+
pub struct Builder {
8+
/// Document Metadata
9+
metadata: Option<Metadata>,
10+
/// Document Content
11+
content: Option<Content>,
12+
/// Signatures
13+
signatures: Option<Signatures>,
14+
}
15+
16+
impl Builder {
17+
/// Start building a signed document
18+
#[must_use]
19+
pub fn new() -> Self {
20+
Self::default()
21+
}
22+
23+
/// Set document metadata
24+
#[must_use]
25+
pub fn metadata(mut self, metadata: Metadata) -> Self {
26+
self.metadata = Some(metadata);
27+
self
28+
}
29+
30+
/// Set document content
31+
#[must_use]
32+
pub fn content(mut self, content: Content) -> Self {
33+
self.content = Some(content);
34+
self
35+
}
36+
37+
/// Set document signatures
38+
#[must_use]
39+
pub fn signatures(mut self, signatures: Signatures) -> Self {
40+
self.signatures = Some(signatures);
41+
self
42+
}
43+
44+
/// Build a signed document
45+
///
46+
/// ## Errors
47+
///
48+
/// Returns
49+
pub fn build(self) -> anyhow::Result<CatalystSignedDocument> {
50+
match (self.metadata, self.content, self.signatures) {
51+
(Some(metadata), Some(content), Some(signatures)) => {
52+
Ok(CatalystSignedDocument {
53+
inner: InnerCatalystSignedDocument {
54+
metadata,
55+
content,
56+
signatures,
57+
}
58+
.into(),
59+
})
60+
},
61+
_ => Err(anyhow::anyhow!("Failed to build Catalyst Signed Document")),
62+
}
63+
}
64+
}

rust/signed_doc/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Catalyst documents signing crate
22
3+
mod builder;
34
mod content;
45
mod error;
56
mod metadata;
@@ -12,6 +13,7 @@ use std::{
1213
};
1314

1415
use anyhow::anyhow;
16+
pub use builder::Builder;
1517
use content::Content;
1618
use coset::CborSerializable;
1719
pub use metadata::{AdditionalFields, DocumentRef, Metadata, UuidV7};
@@ -35,7 +37,7 @@ struct InnerCatalystSignedDocument {
3537
/// non-optional.
3638
pub struct CatalystSignedDocument {
3739
/// Catalyst Signed Document metadata, raw doc, with content errors.
38-
inner: Arc<InnerCatalystSignedDocument>,
40+
pub(crate) inner: Arc<InnerCatalystSignedDocument>,
3941
}
4042

4143
impl Display for CatalystSignedDocument {

0 commit comments

Comments
 (0)