diff --git a/bindings/wasm/docs/api-reference.md b/bindings/wasm/docs/api-reference.md index fe45dcc47c..08be10fe4d 100644 --- a/bindings/wasm/docs/api-reference.md +++ b/bindings/wasm/docs/api-reference.md @@ -11,11 +11,11 @@
DiffChainHistory
-
Document
-
-
DocumentDiff
+
DiffMessage

Defines the difference between two DID Documents' JSON representations.

+
Document
+
DocumentHistory

A DID Document's history and current state.

@@ -109,14 +109,14 @@ Publishes an `IotaDocument` to the Tangle. ### client.publishDiff(message_id, diff) ⇒ [Promise.<Receipt>](#Receipt) -Publishes a `DocumentDiff` to the Tangle. +Publishes a `DiffMessage` to the Tangle. **Kind**: instance method of [Client](#Client) | Param | Type | | --- | --- | | message_id | string | -| diff | [DocumentDiff](#DocumentDiff) | +| diff | [DiffMessage](#DiffMessage) | @@ -629,7 +629,7 @@ Parses a `DIDUrl` from the input string. * [DiffChainHistory](#DiffChainHistory) * _instance_ - * [.chainData()](#DiffChainHistory+chainData) ⇒ [Array.<DocumentDiff>](#DocumentDiff) + * [.chainData()](#DiffChainHistory+chainData) ⇒ [Array.<DiffMessage>](#DiffMessage) * [.spam()](#DiffChainHistory+spam) ⇒ Array.<string> * [.toJSON()](#DiffChainHistory+toJSON) ⇒ any * _static_ @@ -637,8 +637,8 @@ Parses a `DIDUrl` from the input string. -### diffChainHistory.chainData() ⇒ [Array.<DocumentDiff>](#DocumentDiff) -Returns an `Array` of the diff chain `DocumentDiffs`. +### diffChainHistory.chainData() ⇒ [Array.<DiffMessage>](#DiffMessage) +Returns an `Array` of the diff chain `DiffMessages`. NOTE: this clones the field. @@ -668,6 +668,98 @@ Deserializes from a JSON object. | --- | --- | | json | any | + + +## DiffMessage +Defines the difference between two DID `Document`s' JSON representations. + +**Kind**: global class + +* [DiffMessage](#DiffMessage) + * [.did](#DiffMessage+did) ⇒ [DID](#DID) + * [.diff](#DiffMessage+diff) ⇒ string + * [.messageId](#DiffMessage+messageId) ⇒ string + * [.messageId](#DiffMessage+messageId) + * [.previousMessageId](#DiffMessage+previousMessageId) ⇒ string + * [.previousMessageId](#DiffMessage+previousMessageId) + * [.proof](#DiffMessage+proof) ⇒ any + * [.id()](#DiffMessage+id) ⇒ [DID](#DID) + * [.merge(document)](#DiffMessage+merge) ⇒ [Document](#Document) + + + +### diffMessage.did ⇒ [DID](#DID) +Returns the DID of the associated DID Document. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + + +### diffMessage.diff ⇒ string +Returns the raw contents of the DID Document diff. + +NOTE: clones the data. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + + +### diffMessage.messageId ⇒ string +Returns the message_id of the DID Document diff. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + + +### diffMessage.messageId +Sets the message_id of the DID Document diff. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + +| Param | Type | +| --- | --- | +| message_id | string | + + + +### diffMessage.previousMessageId ⇒ string +Returns the Tangle message id of the previous DID Document diff. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + + +### diffMessage.previousMessageId +Sets the Tangle message id of the previous DID Document diff. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + +| Param | Type | +| --- | --- | +| message_id | string | + + + +### diffMessage.proof ⇒ any +Returns the `proof` object. + +**Kind**: instance property of [DiffMessage](#DiffMessage) + + +### diffMessage.id() ⇒ [DID](#DID) +Returns the DID of the associated DID Document. + +NOTE: clones the data. + +**Kind**: instance method of [DiffMessage](#DiffMessage) + + +### diffMessage.merge(document) ⇒ [Document](#Document) +Returns a new DID Document which is the result of merging `self` +with the given Document. + +**Kind**: instance method of [DiffMessage](#DiffMessage) + +| Param | Type | +| --- | --- | +| document | [Document](#Document) | + ## Document @@ -700,7 +792,7 @@ Deserializes from a JSON object. * [.verifyDataWithScope(data, scope)](#Document+verifyDataWithScope) ⇒ boolean * [.resolveMethod(query)](#Document+resolveMethod) ⇒ [VerificationMethod](#VerificationMethod) * [.revokeMerkleKey(query, index)](#Document+revokeMerkleKey) ⇒ boolean - * [.diff(other, message, key, method)](#Document+diff) ⇒ [DocumentDiff](#DocumentDiff) + * [.diff(other, message, key, method)](#Document+diff) ⇒ [DiffMessage](#DiffMessage) * [.verifyDiff(diff)](#Document+verifyDiff) * [.merge(diff)](#Document+merge) * [.integrationIndex()](#Document+integrationIndex) ⇒ string @@ -971,8 +1063,8 @@ in this DID Document with the verification relationship specified by `scope`. -### document.diff(other, message, key, method) ⇒ [DocumentDiff](#DocumentDiff) -Generate a `DocumentDiff` between two DID Documents and sign it using the specified +### document.diff(other, message, key, method) ⇒ [DiffMessage](#DiffMessage) +Generate a `DiffMessage` between two DID Documents and sign it using the specified `key` and `method`. **Kind**: instance method of [Document](#Document) @@ -998,18 +1090,18 @@ Fails if an unsupported verification method is used or the verification operatio | Param | Type | | --- | --- | -| diff | [DocumentDiff](#DocumentDiff) | +| diff | [DiffMessage](#DiffMessage) | ### document.merge(diff) -Verifies a `DocumentDiff` signature and merges the changes into `self`. +Verifies a `DiffMessage` signature and merges the changes into `self`. **Kind**: instance method of [Document](#Document) | Param | Type | | --- | --- | -| diff | [DocumentDiff](#DocumentDiff) | +| diff | [DiffMessage](#DiffMessage) | @@ -1081,98 +1173,6 @@ Deserializes a `Document` object from a JSON object. | --- | --- | | json | any | - - -## DocumentDiff -Defines the difference between two DID `Document`s' JSON representations. - -**Kind**: global class - -* [DocumentDiff](#DocumentDiff) - * [.did](#DocumentDiff+did) ⇒ [DID](#DID) - * [.diff](#DocumentDiff+diff) ⇒ string - * [.messageId](#DocumentDiff+messageId) ⇒ string - * [.messageId](#DocumentDiff+messageId) - * [.previousMessageId](#DocumentDiff+previousMessageId) ⇒ string - * [.previousMessageId](#DocumentDiff+previousMessageId) - * [.proof](#DocumentDiff+proof) ⇒ any - * [.id()](#DocumentDiff+id) ⇒ [DID](#DID) - * [.merge(document)](#DocumentDiff+merge) ⇒ [Document](#Document) - - - -### documentDiff.did ⇒ [DID](#DID) -Returns the DID of the associated DID Document. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - - -### documentDiff.diff ⇒ string -Returns the raw contents of the DID Document diff. - -NOTE: clones the data. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - - -### documentDiff.messageId ⇒ string -Returns the message_id of the DID Document diff. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - - -### documentDiff.messageId -Sets the message_id of the DID Document diff. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - -| Param | Type | -| --- | --- | -| message_id | string | - - - -### documentDiff.previousMessageId ⇒ string -Returns the Tangle message id of the previous DID Document diff. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - - -### documentDiff.previousMessageId -Sets the Tangle message id of the previous DID Document diff. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - -| Param | Type | -| --- | --- | -| message_id | string | - - - -### documentDiff.proof ⇒ any -Returns the `proof` object. - -**Kind**: instance property of [DocumentDiff](#DocumentDiff) - - -### documentDiff.id() ⇒ [DID](#DID) -Returns the DID of the associated DID Document. - -NOTE: clones the data. - -**Kind**: instance method of [DocumentDiff](#DocumentDiff) - - -### documentDiff.merge(document) ⇒ [Document](#Document) -Returns a new DID Document which is the result of merging `self` -with the given Document. - -**Kind**: instance method of [DocumentDiff](#DocumentDiff) - -| Param | Type | -| --- | --- | -| document | [Document](#Document) | - ## DocumentHistory @@ -1184,7 +1184,7 @@ A DID Document's history and current state. * _instance_ * [.integrationChainData()](#DocumentHistory+integrationChainData) ⇒ [Array.<Document>](#Document) * [.integrationChainSpam()](#DocumentHistory+integrationChainSpam) ⇒ Array.<string> - * [.diffChainData()](#DocumentHistory+diffChainData) ⇒ [Array.<DocumentDiff>](#DocumentDiff) + * [.diffChainData()](#DocumentHistory+diffChainData) ⇒ [Array.<DiffMessage>](#DiffMessage) * [.diffChainSpam()](#DocumentHistory+diffChainSpam) ⇒ Array.<string> * [.toJSON()](#DocumentHistory+toJSON) ⇒ any * _static_ @@ -1209,8 +1209,8 @@ NOTE: clones the data. **Kind**: instance method of [DocumentHistory](#DocumentHistory) -### documentHistory.diffChainData() ⇒ [Array.<DocumentDiff>](#DocumentDiff) -Returns an `Array` of diff chain `DocumentDiffs`. +### documentHistory.diffChainData() ⇒ [Array.<DiffMessage>](#DiffMessage) +Returns an `Array` of diff chain `DiffMessages`. NOTE: clones the data. diff --git a/bindings/wasm/src/chain/document_history.rs b/bindings/wasm/src/chain/document_history.rs index 5ba8f02777..c18a93100a 100644 --- a/bindings/wasm/src/chain/document_history.rs +++ b/bindings/wasm/src/chain/document_history.rs @@ -2,14 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 use identity::iota::ChainHistory; -use identity::iota::DocumentDiff; +use identity::iota::DiffMessage; use identity::iota::DocumentHistory; use identity::iota::IotaDocument; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; +use crate::did::WasmDiffMessage; use crate::did::WasmDocument; -use crate::did::WasmDocumentDiff; use crate::error::Result; use crate::error::WasmResult; @@ -36,8 +36,8 @@ extern "C" { #[wasm_bindgen(typescript_type = "Array")] pub type ArrayDocument; - #[wasm_bindgen(typescript_type = "Array")] - pub type ArrayDocumentDiff; + #[wasm_bindgen(typescript_type = "Array")] + pub type ArrayDiffMessage; } #[wasm_bindgen(js_class = DocumentHistory)] @@ -75,20 +75,20 @@ impl WasmDocumentHistory { .unchecked_into::() } - /// Returns an `Array` of diff chain `DocumentDiffs`. + /// Returns an `Array` of diff chain `DiffMessages`. /// /// NOTE: clones the data. #[wasm_bindgen(js_name = diffChainData)] - pub fn diff_chain_data(&self) -> ArrayDocumentDiff { + pub fn diff_chain_data(&self) -> ArrayDiffMessage { self .0 .diff_chain_data .iter() .cloned() - .map(WasmDocumentDiff::from) + .map(WasmDiffMessage::from) .map(JsValue::from) .collect::() - .unchecked_into::() + .unchecked_into::() } /// Returns an `Array` of message id strings for "spam" messages on the same index @@ -133,7 +133,7 @@ pub struct IntegrationChainHistory(ChainHistory); #[wasm_bindgen(inspectable)] #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct DiffChainHistory(ChainHistory); +pub struct DiffChainHistory(ChainHistory); #[wasm_bindgen] impl IntegrationChainHistory { @@ -156,20 +156,20 @@ impl IntegrationChainHistory { #[wasm_bindgen] impl DiffChainHistory { - /// Returns an `Array` of the diff chain `DocumentDiffs`. + /// Returns an `Array` of the diff chain `DiffMessages`. /// /// NOTE: this clones the field. #[wasm_bindgen(js_name = chainData)] - pub fn chain_data(&self) -> ArrayDocumentDiff { + pub fn chain_data(&self) -> ArrayDiffMessage { self .0 .chain_data .iter() .cloned() - .map(WasmDocumentDiff::from) + .map(WasmDiffMessage::from) .map(JsValue::from) .collect::() - .unchecked_into::() + .unchecked_into::() } } @@ -215,4 +215,4 @@ macro_rules! impl_wasm_chain_history { } impl_wasm_chain_history!(IntegrationChainHistory, IotaDocument, WasmDocument); -impl_wasm_chain_history!(DiffChainHistory, DocumentDiff, WasmDocumentDiff); +impl_wasm_chain_history!(DiffChainHistory, DiffMessage, WasmDiffMessage); diff --git a/bindings/wasm/src/did/mod.rs b/bindings/wasm/src/did/mod.rs index 3691801aa3..db45984bca 100644 --- a/bindings/wasm/src/did/mod.rs +++ b/bindings/wasm/src/did/mod.rs @@ -3,13 +3,13 @@ pub use self::wasm_did::WasmDID; pub use self::wasm_did_url::WasmDIDUrl; +pub use self::wasm_diff_message::WasmDiffMessage; pub use self::wasm_document::PromiseDocument; pub use self::wasm_document::WasmDocument; -pub use self::wasm_document_diff::WasmDocumentDiff; pub use self::wasm_verification_method::WasmVerificationMethod; mod wasm_did; mod wasm_did_url; +mod wasm_diff_message; mod wasm_document; -mod wasm_document_diff; mod wasm_verification_method; diff --git a/bindings/wasm/src/did/wasm_document_diff.rs b/bindings/wasm/src/did/wasm_diff_message.rs similarity index 87% rename from bindings/wasm/src/did/wasm_document_diff.rs rename to bindings/wasm/src/did/wasm_diff_message.rs index 28ed7665ba..37c2627579 100644 --- a/bindings/wasm/src/did/wasm_document_diff.rs +++ b/bindings/wasm/src/did/wasm_diff_message.rs @@ -4,7 +4,7 @@ use std::ops::Deref; use std::str::FromStr; -use identity::iota::DocumentDiff; +use identity::iota::DiffMessage; use identity::iota::MessageId; use identity::iota::TangleRef; use wasm_bindgen::prelude::*; @@ -15,12 +15,12 @@ use crate::error::Result; use crate::error::WasmResult; /// Defines the difference between two DID `Document`s' JSON representations. -#[wasm_bindgen(js_name = DocumentDiff, inspectable)] +#[wasm_bindgen(js_name = DiffMessage, inspectable)] #[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] -pub struct WasmDocumentDiff(pub(crate) DocumentDiff); +pub struct WasmDiffMessage(pub(crate) DiffMessage); -#[wasm_bindgen(js_class = DocumentDiff)] -impl WasmDocumentDiff { +#[wasm_bindgen(js_class = DiffMessage)] +impl WasmDiffMessage { /// Returns the DID of the associated DID Document. /// /// NOTE: clones the data. @@ -87,14 +87,14 @@ impl WasmDocumentDiff { } } -impl From for WasmDocumentDiff { - fn from(document_diff: DocumentDiff) -> Self { +impl From for WasmDiffMessage { + fn from(document_diff: DiffMessage) -> Self { Self(document_diff) } } -impl Deref for WasmDocumentDiff { - type Target = DocumentDiff; +impl Deref for WasmDiffMessage { + type Target = DiffMessage; fn deref(&self) -> &Self::Target { &self.0 diff --git a/bindings/wasm/src/did/wasm_document.rs b/bindings/wasm/src/did/wasm_document.rs index 93e7c953e8..bcd28ab8cf 100644 --- a/bindings/wasm/src/did/wasm_document.rs +++ b/bindings/wasm/src/did/wasm_document.rs @@ -26,7 +26,7 @@ use crate::credential::VerifiablePresentation; use crate::crypto::KeyPair; use crate::did::wasm_did_url::WasmDIDUrl; use crate::did::WasmDID; -use crate::did::WasmDocumentDiff; +use crate::did::WasmDiffMessage; use crate::did::WasmVerificationMethod; use crate::error::Result; use crate::error::WasmResult; @@ -345,10 +345,10 @@ impl WasmDocument { // Diffs // =========================================================================== - /// Generate a `DocumentDiff` between two DID Documents and sign it using the specified + /// Generate a `DiffMessage` between two DID Documents and sign it using the specified /// `key` and `method`. #[wasm_bindgen] - pub fn diff(&self, other: &WasmDocument, message: &str, key: &KeyPair, method: &str) -> Result { + pub fn diff(&self, other: &WasmDocument, message: &str, key: &KeyPair, method: &str) -> Result { self .0 .diff( @@ -357,7 +357,7 @@ impl WasmDocument { key.0.private(), method, ) - .map(WasmDocumentDiff::from) + .map(WasmDiffMessage::from) .wasm_result() } @@ -368,13 +368,13 @@ impl WasmDocument { /// /// Fails if an unsupported verification method is used or the verification operation fails. #[wasm_bindgen(js_name = verifyDiff)] - pub fn verify_diff(&self, diff: &WasmDocumentDiff) -> Result<()> { + pub fn verify_diff(&self, diff: &WasmDiffMessage) -> Result<()> { self.0.verify_diff(&diff.0).wasm_result() } - /// Verifies a `DocumentDiff` signature and merges the changes into `self`. + /// Verifies a `DiffMessage` signature and merges the changes into `self`. #[wasm_bindgen] - pub fn merge(&mut self, diff: &WasmDocumentDiff) -> Result<()> { + pub fn merge(&mut self, diff: &WasmDiffMessage) -> Result<()> { self.0.merge(&diff.0).wasm_result() } diff --git a/bindings/wasm/src/tangle/client.rs b/bindings/wasm/src/tangle/client.rs index 1a66d2a85d..3268d4e92f 100644 --- a/bindings/wasm/src/tangle/client.rs +++ b/bindings/wasm/src/tangle/client.rs @@ -25,8 +25,8 @@ use crate::chain::PromiseDiffChainHistory; use crate::chain::PromiseDocumentHistory; use crate::chain::WasmDocumentHistory; use crate::did::PromiseDocument; +use crate::did::WasmDiffMessage; use crate::did::WasmDocument; -use crate::did::WasmDocumentDiff; use crate::error::Result; use crate::error::WasmResult; use crate::tangle::Config; @@ -97,9 +97,9 @@ impl Client { Ok(promise.unchecked_into::()) } - /// Publishes a `DocumentDiff` to the Tangle. + /// Publishes a `DiffMessage` to the Tangle. #[wasm_bindgen(js_name = publishDiff)] - pub fn publish_diff(&self, message_id: &str, diff: WasmDocumentDiff) -> Result { + pub fn publish_diff(&self, message_id: &str, diff: WasmDiffMessage) -> Result { let message: MessageId = MessageId::from_str(message_id).wasm_result()?; let client: Rc = self.client.clone(); diff --git a/examples/account/config.rs b/examples/account/config.rs index 3d6b6a0a83..3f1c255740 100644 --- a/examples/account/config.rs +++ b/examples/account/config.rs @@ -27,10 +27,10 @@ async fn main() -> Result<()> { let network_name = "dev"; let network = Network::try_from_name(network_name)?; - // If you deployed an explorer locally this would usually be `http://127.0.0.1:8082/` - let explorer = ExplorerUrl::parse("https://explorer.iota.org/devnet/")?; + // If you deployed an explorer locally this would usually be `http://127.0.0.1:8082` + let explorer = ExplorerUrl::parse("https://explorer.iota.org/devnet")?; - // In a locally running one-click tangle, this would often be `http://127.0.0.1:14265/` + // In a locally running one-click tangle, this would often be `http://127.0.0.1:14265` let private_node_url = "https://api.lb-0.h.chrysalis-devnet.iota.cafe"; // Create a new Account with explicit configuration @@ -65,7 +65,7 @@ async fn main() -> Result<()> { let identity: Account = match builder.create_identity(identity_setup).await { Ok(identity) => identity, Err(err) => { - eprintln!("[Example] Error: {:?} {}", err, err.to_string()); + eprintln!("[Example] Error: {:?}", err); eprintln!("[Example] Is your Tangle node listening on {}?", private_node_url); return Ok(()); } diff --git a/examples/low-level-api/diff_chain.rs b/examples/low-level-api/diff_chain.rs index 239a79d292..88effdd8c7 100644 --- a/examples/low-level-api/diff_chain.rs +++ b/examples/low-level-api/diff_chain.rs @@ -11,7 +11,7 @@ use identity::core::FromJson; use identity::did::Service; use identity::did::DID; use identity::iota::ClientMap; -use identity::iota::DocumentDiff; +use identity::iota::DiffMessage; use identity::iota::ExplorerUrl; use identity::iota::Receipt; use identity::iota::TangleRef; @@ -42,7 +42,7 @@ async fn main() -> Result<()> { }; // Generate a signed diff object. - let diff: DocumentDiff = document.diff( + let diff: DiffMessage = document.diff( &updated_document, *receipt.message_id(), keypair.private(), diff --git a/examples/low-level-api/private_tangle.rs b/examples/low-level-api/private_tangle.rs index 32c78df770..00b61ad1bc 100644 --- a/examples/low-level-api/private_tangle.rs +++ b/examples/low-level-api/private_tangle.rs @@ -30,10 +30,10 @@ pub async fn main() -> Result<()> { let network_name = "dev"; let network = Network::try_from_name(network_name)?; - // If you deployed an explorer locally this would usually be `http://127.0.0.1:8082/` - let explorer = ExplorerUrl::parse("https://explorer.iota.org/devnet/")?; + // If you deployed an explorer locally this would usually be `http://127.0.0.1:8082` + let explorer = ExplorerUrl::parse("https://explorer.iota.org/devnet")?; - // In a locally running one-click tangle, this would often be `http://127.0.0.1:14265/` + // In a locally running one-click tangle, this would often be `http://127.0.0.1:14265` let private_node_url = "https://api.lb-0.h.chrysalis-devnet.iota.cafe"; // Use DIDMessageEncoding::Json instead to publish plaintext messages to the Tangle for debugging. @@ -59,7 +59,7 @@ pub async fn main() -> Result<()> { let receipt: Receipt = match client.publish_document(&document).await { Ok(receipt) => receipt, Err(err) => { - eprintln!("Error > {:?} {}", err, err.to_string()); + eprintln!("Error > {:?}", err); eprintln!("Is your private Tangle node listening on {}?", private_node_url); return Ok(()); } diff --git a/examples/low-level-api/resolve_history.rs b/examples/low-level-api/resolve_history.rs index 7e8aa43321..ee8da134bf 100644 --- a/examples/low-level-api/resolve_history.rs +++ b/examples/low-level-api/resolve_history.rs @@ -15,7 +15,7 @@ use identity::did::Service; use identity::did::DID; use identity::iota::ChainHistory; use identity::iota::Client; -use identity::iota::DocumentDiff; +use identity::iota::DiffMessage; use identity::iota::DocumentHistory; use identity::iota::IotaDocument; use identity::iota::IotaVerificationMethod; @@ -103,7 +103,7 @@ async fn main() -> Result<()> { // // This is the first diff therefore the `previous_message_id` property is // set to the last DID document published. - let diff_1: DocumentDiff = int_doc_1.diff(&diff_doc_1, *int_receipt_1.message_id(), keypair.private(), int_doc_1.default_signing_method()?.id())?; + let diff_1: DiffMessage = int_doc_1.diff(&diff_doc_1, *int_receipt_1.message_id(), keypair.private(), int_doc_1.default_signing_method()?.id())?; // Publish the diff to the Tangle, starting a diff chain. let diff_receipt_1: Receipt = client.publish_diff(int_receipt_1.message_id(), &diff_1).await?; @@ -132,7 +132,7 @@ async fn main() -> Result<()> { // This is the second diff therefore its `previous_message_id` property is // set to the first published diff to extend the diff chain. - let diff_2: DocumentDiff = diff_doc_1.diff(&diff_doc_2, *diff_receipt_1.message_id(), keypair.private(), diff_doc_1.default_signing_method()?.id())?; + let diff_2: DiffMessage = diff_doc_1.diff(&diff_doc_2, *diff_receipt_1.message_id(), keypair.private(), diff_doc_1.default_signing_method()?.id())?; // Publish the diff to the Tangle. // Note that we still use the `message_id` from the last integration chain message here to link // the current diff chain to that point on the integration chain. @@ -208,7 +208,7 @@ async fn main() -> Result<()> { // Fetch the diff chain history of the previous integration chain document. // Old diff chains can be retrieved but they no longer affect DID resolution. let previous_integration_document = &history_2.integration_chain_data[1]; - let previous_diff_history: ChainHistory = client + let previous_diff_history: ChainHistory = client .resolve_diff_history(previous_integration_document) .await?; diff --git a/identity-account/src/account/account.rs b/identity-account/src/account/account.rs index f5645b3eb3..af4b26d2e2 100644 --- a/identity-account/src/account/account.rs +++ b/identity-account/src/account/account.rs @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 use identity_core::crypto::SetSignature; -use identity_iota::did::DocumentDiff; use identity_iota::did::IotaDID; -use identity_iota::did::IotaDocument; -use identity_iota::did::IotaVerificationMethod; +use identity_iota::document::DiffMessage; +use identity_iota::document::IotaDocument; +use identity_iota::document::IotaVerificationMethod; use identity_iota::tangle::Client; use identity_iota::tangle::ClientMap; use identity_iota::tangle::MessageId; @@ -364,7 +364,7 @@ impl Account { } } - let mut diff: DocumentDiff = DocumentDiff::new(old_doc, new_doc, *previous_message_id)?; + let mut diff: DiffMessage = DiffMessage::new(old_doc, new_doc, *previous_message_id)?; let method: &IotaVerificationMethod = old_state.document().default_signing_method()?; diff --git a/identity-account/src/identity/identity_state.rs b/identity-account/src/identity/identity_state.rs index 95c001c153..a720366683 100644 --- a/identity-account/src/identity/identity_state.rs +++ b/identity-account/src/identity/identity_state.rs @@ -10,7 +10,7 @@ use identity_core::crypto::SetSignature; use identity_did::verification::MethodType; use identity_iota::did::IotaDID; use identity_iota::did::IotaDIDUrl; -use identity_iota::did::IotaDocument; +use identity_iota::document::IotaDocument; use identity_iota::tangle::TangleRef; use crate::crypto::RemoteEd25519; diff --git a/identity-account/src/updates/update.rs b/identity-account/src/updates/update.rs index 6a89100186..8e73e620c1 100644 --- a/identity-account/src/updates/update.rs +++ b/identity-account/src/updates/update.rs @@ -18,8 +18,8 @@ use identity_did::verification::MethodScope; use identity_did::verification::MethodType; use identity_iota::did::IotaDID; use identity_iota::did::IotaDIDUrl; -use identity_iota::did::IotaDocument; -use identity_iota::did::IotaVerificationMethod; +use identity_iota::document::IotaDocument; +use identity_iota::document::IotaVerificationMethod; use identity_iota::tangle::UPDATE_METHOD_TYPES; use crate::account::Account; diff --git a/identity-did/src/did/did_url.rs b/identity-did/src/did/did_url.rs index 4ebd8e9bb9..6fe2df0494 100644 --- a/identity-did/src/did/did_url.rs +++ b/identity-did/src/did/did_url.rs @@ -223,7 +223,7 @@ impl Display for RelativeDIDUrl { impl Debug for RelativeDIDUrl { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - f.write_fmt(format_args!("{}", self.to_string())) + f.write_fmt(format_args!("{}", self)) } } @@ -541,7 +541,7 @@ where T: DID, { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - f.write_fmt(format_args!("{}", self.to_string())) + f.write_fmt(format_args!("{}", self)) } } @@ -550,7 +550,7 @@ where T: DID, { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - f.write_fmt(format_args!("{}{}", self.did.as_str(), self.url.to_string())) + f.write_fmt(format_args!("{}{}", self.did.as_str(), self.url)) } } diff --git a/identity-iota/src/chain/diff_chain.rs b/identity-iota/src/chain/diff_chain.rs index 7fe2d35276..cffc796bc4 100644 --- a/identity-iota/src/chain/diff_chain.rs +++ b/identity-iota/src/chain/diff_chain.rs @@ -7,12 +7,16 @@ use core::fmt::Formatter; use core::fmt::Result as FmtResult; use core::slice::Iter; +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::convert::ToJson; use crate::chain::IntegrationChain; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Error; use crate::error::Result; use crate::tangle::Message; @@ -25,7 +29,7 @@ use crate::tangle::TangleRef; #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(transparent)] pub struct DiffChain { - inner: Vec, + inner: Vec, } impl DiffChain { @@ -33,19 +37,19 @@ impl DiffChain { pub fn try_from_messages(integration_chain: &IntegrationChain, messages: &[Message]) -> Result { let did: &IotaDID = integration_chain.current().id(); - let index: MessageIndex = messages + let index: MessageIndex = messages .iter() .flat_map(|message| message.try_extract_diff(did)) .collect(); - debug!("[Diff] Valid Messages = {}/{}", messages.len(), index.len()); + log::debug!("[Diff] Valid Messages = {}/{}", messages.len(), index.len()); Self::try_from_index(integration_chain, index) } /// Constructs a new [`DiffChain`] for the given [`IntegrationChain`] from the given [`MessageIndex`]. - pub fn try_from_index(integration_chain: &IntegrationChain, index: MessageIndex) -> Result { - trace!("[Diff] Message Index = {:#?}", index); + pub fn try_from_index(integration_chain: &IntegrationChain, index: MessageIndex) -> Result { + log::trace!("[Diff] Message Index = {:#?}", index); Self::try_from_index_with_document(integration_chain.current(), index) } @@ -53,7 +57,7 @@ impl DiffChain { /// to validate. pub(in crate::chain) fn try_from_index_with_document( integration_document: &IotaDocument, - mut index: MessageIndex, + mut index: MessageIndex, ) -> Result { if index.is_empty() { return Ok(Self::new()); @@ -95,8 +99,8 @@ impl DiffChain { self.inner.clear(); } - /// Returns an iterator yielding references to [`DocumentDiffs`][DocumentDiff]. - pub fn iter(&self) -> Iter<'_, DocumentDiff> { + /// Returns an iterator yielding references to [`DiffMessages`][DiffMessage]. + pub fn iter(&self) -> Iter<'_, DiffMessage> { self.inner.iter() } @@ -111,7 +115,7 @@ impl DiffChain { /// /// Fails if the diff signature is invalid or the Tangle message /// references within the diff are invalid. - pub fn try_push(&mut self, diff: DocumentDiff, integration_chain: &IntegrationChain) -> Result<()> { + pub fn try_push(&mut self, diff: DiffMessage, integration_chain: &IntegrationChain) -> Result<()> { let document: &IotaDocument = integration_chain.current(); self.try_push_inner(diff, document) } @@ -122,7 +126,7 @@ impl DiffChain { /// /// Fails if the diff signature is invalid or the Tangle message /// references within the diff are invalid. - fn try_push_inner(&mut self, diff: DocumentDiff, document: &IotaDocument) -> Result<()> { + fn try_push_inner(&mut self, diff: DiffMessage, document: &IotaDocument) -> Result<()> { let expected_prev_message_id: &MessageId = self.current_message_id().unwrap_or_else(|| document.message_id()); Self::check_valid_addition(&diff, document, expected_prev_message_id)?; @@ -139,18 +143,18 @@ impl DiffChain { /// # Safety /// /// This function is unsafe because it does not check the validity of - /// the signature or Tangle references of the [`DocumentDiff`]. - pub unsafe fn push_unchecked(&mut self, diff: DocumentDiff) { + /// the signature or Tangle references of the [`DiffMessage`]. + pub unsafe fn push_unchecked(&mut self, diff: DiffMessage) { self.inner.push(diff); } - /// Checks if the [`DocumentDiff`] can be added to the [`DiffChain`]. + /// Checks if the [`DiffMessage`] can be added to the [`DiffChain`]. /// /// # Errors /// - /// Fails if the [`DocumentDiff`] is not a valid addition. + /// Fails if the [`DiffMessage`] is not a valid addition. pub fn check_valid_addition( - diff: &DocumentDiff, + diff: &DiffMessage, document: &IotaDocument, expected_prev_message_id: &MessageId, ) -> Result<()> { @@ -202,7 +206,7 @@ impl Display for DiffChain { } } -impl From for Vec { +impl From for Vec { fn from(diff_chain: DiffChain) -> Self { diff_chain.inner } @@ -221,8 +225,8 @@ mod test { use crate::chain::DocumentChain; use crate::chain::IntegrationChain; - use crate::did::DocumentDiff; - use crate::did::IotaDocument; + use crate::document::DiffMessage; + use crate::document::IotaDocument; use crate::tangle::MessageId; use crate::tangle::TangleRef; @@ -307,7 +311,7 @@ mod test { // Sign using the new key added in the previous integration chain update. let message_id = *chain.diff_message_id(); - let mut diff: DocumentDiff = chain + let mut diff: DiffMessage = chain .current() .diff(&new, message_id, keys[1].private(), "#key-2") .unwrap(); diff --git a/identity-iota/src/chain/document_chain.rs b/identity-iota/src/chain/document_chain.rs index aa34f45ef8..80080d3353 100644 --- a/identity-iota/src/chain/document_chain.rs +++ b/identity-iota/src/chain/document_chain.rs @@ -6,13 +6,16 @@ use core::fmt::Error as FmtError; use core::fmt::Formatter; use core::fmt::Result as FmtResult; +use serde::Deserialize; +use serde::Serialize; + use identity_core::convert::ToJson; use crate::chain::DiffChain; use crate::chain::IntegrationChain; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::MessageId; @@ -136,12 +139,12 @@ impl DocumentChain { Ok(()) } - /// Adds a new [`DocumentDiff`] to the chain. + /// Adds a new [`DiffMessage`] to the chain. /// /// # Errors /// /// Fails if the diff is invalid. - pub fn try_push_diff(&mut self, diff: DocumentDiff) -> Result<()> { + pub fn try_push_diff(&mut self, diff: DiffMessage) -> Result<()> { // Use the last integration chain document to validate the signature on the diff. let integration_document: &IotaDocument = self.chain_i.current(); let expected_prev_message_id: &MessageId = self.diff_message_id(); diff --git a/identity-iota/src/chain/document_history.rs b/identity-iota/src/chain/document_history.rs index 9b931dc61f..c435ba20b3 100644 --- a/identity-iota/src/chain/document_history.rs +++ b/identity-iota/src/chain/document_history.rs @@ -4,11 +4,15 @@ use std::collections::HashSet; use std::ops::Deref; +use serde; +use serde::Deserialize; +use serde::Serialize; + use crate::chain::DiffChain; use crate::chain::IntegrationChain; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::Client; use crate::tangle::Message; @@ -29,7 +33,7 @@ pub struct DocumentHistory { pub integration_chain_spam: Vec, /// List of diffs for the last integration chain document. #[serde(rename = "diffChainData")] - pub diff_chain_data: Vec, + pub diff_chain_data: Vec, /// List of "spam" messages on the diff chain index. #[serde(rename = "diffChainSpam")] pub diff_chain_spam: Vec, @@ -50,7 +54,7 @@ impl DocumentHistory { let integration_chain_history: ChainHistory = ChainHistory::from((integration_chain, integration_messages.deref())); - let diff_chain_history: ChainHistory = ChainHistory::from((diff_chain, diff_messages.deref())); + let diff_chain_history: ChainHistory = ChainHistory::from((diff_chain, diff_messages.deref())); Ok(Self { integration_chain_data: integration_chain_history.chain_data, integration_chain_spam: integration_chain_history.spam, @@ -90,15 +94,15 @@ where } } -impl ChainHistory { - /// Construct a [`ChainHistory`] of [`DocumentDiffs`](DocumentDiff) for an integration chain +impl ChainHistory { + /// Construct a [`ChainHistory`] of [`DiffMessages`](DiffMessage) for an integration chain /// [`IotaDocument`]. /// /// This is useful for constructing histories of old diff chains no longer at the end of an /// integration chain. pub fn try_from_raw_messages(document: &IotaDocument, messages: &[Message]) -> Result { let did: &IotaDID = document.did(); - let index: MessageIndex = messages + let index: MessageIndex = messages .iter() .flat_map(|message| message.try_extract_diff(did)) .collect(); @@ -120,7 +124,7 @@ impl From<(IntegrationChain, &[Message])> for ChainHistory { } /// Construct [`ChainHistory`] from a [`DiffChain`]. -impl From<(DiffChain, &[Message])> for ChainHistory { +impl From<(DiffChain, &[Message])> for ChainHistory { fn from((diff_chain, messages): (DiffChain, &[Message])) -> Self { let chain_data = Vec::from(diff_chain); let spam = ChainHistory::separate_spam(&chain_data, messages); diff --git a/identity-iota/src/chain/integration_chain.rs b/identity-iota/src/chain/integration_chain.rs index e7609db943..5c32217532 100644 --- a/identity-iota/src/chain/integration_chain.rs +++ b/identity-iota/src/chain/integration_chain.rs @@ -7,10 +7,14 @@ use core::fmt::Formatter; use core::fmt::Result as FmtResult; use core::mem; +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::convert::ToJson; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::IotaDocument; use crate::error::Error; use crate::error::Result; use crate::tangle::Message; @@ -39,14 +43,14 @@ impl IntegrationChain { .flat_map(|message| message.try_extract_document(did)) .collect(); - debug!("[Int] Valid Messages = {}/{}", messages.len(), index.len()); + log::debug!("[Int] Valid Messages = {}/{}", messages.len(), index.len()); Self::try_from_index(index) } /// Constructs a new [`IntegrationChain`] from the given [`MessageIndex`]. pub fn try_from_index(mut index: MessageIndex) -> Result { - trace!("[Int] Message Index = {:#?}", index); + log::trace!("[Int] Message Index = {:#?}", index); // Extract root document. let current: IotaDocument = index diff --git a/identity-iota/src/credential/validator.rs b/identity-iota/src/credential/validator.rs index 8d58303cde..413cf818b3 100644 --- a/identity-iota/src/credential/validator.rs +++ b/identity-iota/src/credential/validator.rs @@ -12,7 +12,7 @@ use identity_credential::credential::Credential; use identity_credential::presentation::Presentation; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::IotaDocument; use crate::error::Error; use crate::error::Result; use crate::tangle::Client; diff --git a/identity-iota/src/did/did/mod.rs b/identity-iota/src/did/did/mod.rs deleted file mode 100644 index 6b76d9c092..0000000000 --- a/identity-iota/src/did/did/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2020-2021 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -mod iota_did; -mod segments; - -pub use self::iota_did::IotaDID; -pub use self::iota_did::IotaDIDUrl; -pub use self::segments::Segments; diff --git a/identity-iota/src/did/did/iota_did.rs b/identity-iota/src/did/iota_did.rs similarity index 99% rename from identity-iota/src/did/did/iota_did.rs rename to identity-iota/src/did/iota_did.rs index a357e0a8d2..60b4a0b2b3 100644 --- a/identity-iota/src/did/did/iota_did.rs +++ b/identity-iota/src/did/iota_did.rs @@ -11,6 +11,9 @@ use std::convert::TryInto; use crypto::hashes::blake2b::Blake2b256; use crypto::hashes::Digest; +use serde; +use serde::Deserialize; +use serde::Serialize; use identity_core::utils::decode_b58; use identity_core::utils::encode_b58; @@ -25,6 +28,7 @@ use crate::error::Error; use crate::error::Result; use crate::tangle::Network; use crate::tangle::NetworkName; +use crate::try_construct_did; // The hash size of BLAKE2b-256 (32-bytes) const BLAKE2B_256_LEN: usize = 32; diff --git a/identity-iota/src/did/mod.rs b/identity-iota/src/did/mod.rs index 3938af8f4b..c206f49d4e 100644 --- a/identity-iota/src/did/mod.rs +++ b/identity-iota/src/did/mod.rs @@ -1,19 +1,10 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -#[macro_use] -mod macros; - -#[allow(clippy::module_inception)] -mod did; -mod doc; +pub use self::iota_did::IotaDID; +pub use self::iota_did::IotaDIDUrl; +pub use self::segments::Segments; -pub use self::did::IotaDID; -pub use self::did::IotaDIDUrl; -pub use self::did::Segments; -pub use self::doc::DocumentDiff; -pub use self::doc::IotaDocument; -pub use self::doc::IotaDocumentSigner; -pub use self::doc::IotaDocumentVerifier; -pub use self::doc::IotaVerificationMethod; -pub use self::doc::Properties; +mod iota_did; +mod macros; +mod segments; diff --git a/identity-iota/src/did/did/segments.rs b/identity-iota/src/did/segments.rs similarity index 100% rename from identity-iota/src/did/did/segments.rs rename to identity-iota/src/did/segments.rs diff --git a/identity-iota/src/did/doc/document_diff.rs b/identity-iota/src/document/diff_message.rs similarity index 89% rename from identity-iota/src/did/doc/document_diff.rs rename to identity-iota/src/document/diff_message.rs index d413918910..2c914dff8f 100644 --- a/identity-iota/src/did/doc/document_diff.rs +++ b/identity-iota/src/document/diff_message.rs @@ -1,6 +1,10 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::convert::FromJson; use identity_core::convert::SerdeInto; use identity_core::convert::ToJson; @@ -15,7 +19,7 @@ use identity_did::verification::MethodUriType; use identity_did::verification::TryMethod; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::MessageId; use crate::tangle::MessageIdExt; @@ -23,7 +27,7 @@ use crate::tangle::TangleRef; /// Defines the difference between two DID [`Document`]s' JSON representations. #[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] -pub struct DocumentDiff { +pub struct DiffMessage { pub(crate) did: IotaDID, pub(crate) diff: String, #[serde( @@ -38,8 +42,8 @@ pub struct DocumentDiff { pub(crate) message_id: MessageId, } -impl DocumentDiff { - /// Construct a new `DocumentDiff` by diffing the JSON representations of `current` and `updated`. +impl DiffMessage { + /// Construct a new `DiffMessage` by diffing the JSON representations of `current` and `updated`. /// /// The `previous_message_id` is included verbatim in the output, and the `proof` is `None`. To /// set a proof, use the `set_signature()` method. @@ -88,7 +92,7 @@ impl DocumentDiff { } } -impl TangleRef for DocumentDiff { +impl TangleRef for DiffMessage { fn did(&self) -> &IotaDID { self.id() } @@ -110,24 +114,24 @@ impl TangleRef for DocumentDiff { } } -impl TrySignature for DocumentDiff { +impl TrySignature for DiffMessage { fn signature(&self) -> Option<&Signature> { self.proof.as_ref() } } -impl TrySignatureMut for DocumentDiff { +impl TrySignatureMut for DiffMessage { fn signature_mut(&mut self) -> Option<&mut Signature> { self.proof.as_mut() } } -impl SetSignature for DocumentDiff { +impl SetSignature for DiffMessage { fn set_signature(&mut self, value: Signature) { self.proof = Some(value); } } -impl TryMethod for DocumentDiff { +impl TryMethod for DiffMessage { const TYPE: MethodUriType = MethodUriType::Relative; } diff --git a/identity-iota/src/did/doc/iota_document.rs b/identity-iota/src/document/iota_document.rs similarity index 97% rename from identity-iota/src/did/doc/iota_document.rs rename to identity-iota/src/document/iota_document.rs index 40f6510864..b1cc229780 100644 --- a/identity-iota/src/did/doc/iota_document.rs +++ b/identity-iota/src/document/iota_document.rs @@ -8,7 +8,8 @@ use core::fmt::Display; use core::fmt::Formatter; use core::fmt::Result as FmtResult; -use identity_did::verification::MethodRelationship; +use serde; +use serde::Deserialize; use serde::Serialize; use identity_core::common::Object; @@ -35,17 +36,18 @@ use identity_did::verifiable::DocumentVerifier; use identity_did::verifiable::Properties as VerifiableProperties; use identity_did::verification::MethodQuery; use identity_did::verification::MethodRef; +use identity_did::verification::MethodRelationship; use identity_did::verification::MethodScope; use identity_did::verification::MethodType; use identity_did::verification::MethodUriType; use identity_did::verification::TryMethod; use identity_did::verification::VerificationMethod; -use crate::did::DocumentDiff; use crate::did::IotaDID; use crate::did::IotaDIDUrl; -use crate::did::IotaVerificationMethod; -use crate::did::Properties as BaseProperties; +use crate::document::DiffMessage; +use crate::document::IotaVerificationMethod; +use crate::document::Properties as BaseProperties; use crate::error::Error; use crate::error::Result; use crate::tangle::MessageId; @@ -89,7 +91,7 @@ impl IotaDocument { /// /// ``` /// # use identity_core::crypto::KeyPair; - /// # use identity_iota::did::IotaDocument; + /// # use identity_iota::document::IotaDocument; /// # /// // Create a DID Document from a new Ed25519 keypair. /// let keypair = KeyPair::new_ed25519().unwrap(); @@ -114,7 +116,7 @@ impl IotaDocument { /// /// ``` /// # use identity_core::crypto::KeyPair; - /// # use identity_iota::did::IotaDocument; + /// # use identity_iota::document::IotaDocument; /// # use identity_iota::tangle::Network; /// # /// // Create a new DID Document for the devnet from a new Ed25519 keypair. @@ -201,7 +203,7 @@ impl IotaDocument { // Validate that the document controller (if any) conforms to the IotaDID specification. // This check is required to ensure the correctness of the `IotaDocument::controller()` method // which creates an `IotaDID::new_unchecked_ref()` from the underlying controller. - document.controller().map_or(Ok(()), |c| IotaDID::check_validity(c))?; + document.controller().map_or(Ok(()), IotaDID::check_validity)?; // Validate that the verification methods conform to the IotaDID specification. // This check is required to ensure the correctness of the @@ -376,8 +378,8 @@ impl IotaDocument { /// Returns an iterator over all [`IotaVerificationMethods`][IotaVerificationMethod] in the DID Document. pub fn methods(&self) -> impl Iterator { self.document.methods().map(|m| - // SAFETY: Validity of verification methods checked in `IotaVerificationMethod::check_validity`. - unsafe { IotaVerificationMethod::new_unchecked_ref(m) }) + // SAFETY: Validity of verification methods checked in `IotaVerificationMethod::check_validity`. + unsafe { IotaVerificationMethod::new_unchecked_ref(m) }) } /// Adds a new [`IotaVerificationMethod`] to the document in the given [`MethodScope`]. @@ -640,9 +642,9 @@ impl IotaDocument { // Diffs // =========================================================================== - /// Creates a `DocumentDiff` representing the changes between `self` and `other`. + /// Creates a `DiffMessage` representing the changes between `self` and `other`. /// - /// The returned `DocumentDiff` will have a digital signature created using the + /// The returned `DiffMessage` will have a digital signature created using the /// specified `private_key` and `method_query`. /// /// NOTE: the method must be a capability invocation method. @@ -656,11 +658,11 @@ impl IotaDocument { message_id: MessageId, private_key: &'query PrivateKey, method_query: Q, - ) -> Result + ) -> Result where Q: Into>, { - let mut diff: DocumentDiff = DocumentDiff::new(self, other, message_id)?; + let mut diff: DiffMessage = DiffMessage::new(self, other, message_id)?; // Ensure the signing method has a capability invocation verification relationship. let method_query = method_query.into(); @@ -679,11 +681,11 @@ impl IotaDocument { /// # Errors /// /// Fails if an unsupported verification method is used or the verification operation fails. - pub fn verify_diff(&self, diff: &DocumentDiff) -> Result<()> { + pub fn verify_diff(&self, diff: &DiffMessage) -> Result<()> { self.verify_data_with_scope(diff, MethodScope::capability_invocation()) } - /// Verifies a `DocumentDiff` signature and merges the changes into `self`. + /// Verifies a `DiffMessage` signature and merges the changes into `self`. /// /// If merging fails `self` remains unmodified, otherwise `self` represents /// the merged document state. @@ -693,7 +695,7 @@ impl IotaDocument { /// # Errors /// /// Fails if the merge operation or signature operation fails. - pub fn merge(&mut self, diff: &DocumentDiff) -> Result<()> { + pub fn merge(&mut self, diff: &DiffMessage) -> Result<()> { self.verify_diff(diff)?; *self = diff.merge(self)?; @@ -814,34 +816,17 @@ mod tests { use identity_core::common::Value; use identity_core::convert::FromJson; - use identity_core::convert::SerdeInto; use identity_core::crypto::merkle_key::Sha256; use identity_core::crypto::KeyCollection; - use identity_core::crypto::KeyPair; use identity_core::crypto::KeyType; - use identity_core::crypto::PrivateKey; - use identity_core::crypto::PublicKey; use identity_core::utils::encode_b58; use identity_did::did::CoreDID; - use identity_did::did::CoreDIDUrl; use identity_did::did::DID; - use identity_did::document::CoreDocument; - use identity_did::service::Service; use identity_did::verification::MethodData; - use identity_did::verification::MethodRef; - use identity_did::verification::MethodScope; - use identity_did::verification::MethodType; - use identity_did::verification::VerificationMethod; - - use crate::did::did::IotaDID; - use crate::did::doc::iota_document::Properties; - use crate::did::doc::IotaDocument; - use crate::did::doc::IotaVerificationMethod; - use crate::did::IotaDIDUrl; - use crate::tangle::MessageId; + use crate::tangle::Network; - use crate::tangle::TangleRef; - use crate::Error; + + use super::*; const DID_ID: &str = "did:iota:HGE4tecHWL2YiZv5qAGtH7gaeQcaz2Z1CR15GWmMjY1M"; const DID_METHOD_ID: &str = "did:iota:HGE4tecHWL2YiZv5qAGtH7gaeQcaz2Z1CR15GWmMjY1M#sign-0"; diff --git a/identity-iota/src/did/doc/iota_verification_method.rs b/identity-iota/src/document/iota_verification_method.rs similarity index 99% rename from identity-iota/src/did/doc/iota_verification_method.rs rename to identity-iota/src/document/iota_verification_method.rs index 7e455fa632..0e28c8b64e 100644 --- a/identity-iota/src/did/doc/iota_verification_method.rs +++ b/identity-iota/src/document/iota_verification_method.rs @@ -9,6 +9,10 @@ use core::fmt::Formatter; use core::fmt::Result as FmtResult; use core::ops::Deref; +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::common::BitSet; use identity_core::convert::ToJson; use identity_core::crypto::merkle_key::MerkleDigest; diff --git a/identity-iota/src/did/doc/mod.rs b/identity-iota/src/document/mod.rs similarity index 86% rename from identity-iota/src/did/doc/mod.rs rename to identity-iota/src/document/mod.rs index 86f2134d50..7a8ceae80c 100644 --- a/identity-iota/src/did/doc/mod.rs +++ b/identity-iota/src/document/mod.rs @@ -1,14 +1,14 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -mod document_diff; -mod iota_document; -mod iota_verification_method; -mod properties; - -pub use self::document_diff::DocumentDiff; +pub use self::diff_message::DiffMessage; pub use self::iota_document::IotaDocument; pub use self::iota_document::IotaDocumentSigner; pub use self::iota_document::IotaDocumentVerifier; pub use self::iota_verification_method::IotaVerificationMethod; pub use self::properties::Properties; + +mod diff_message; +mod iota_document; +mod iota_verification_method; +mod properties; diff --git a/identity-iota/src/did/doc/properties.rs b/identity-iota/src/document/properties.rs similarity index 94% rename from identity-iota/src/did/doc/properties.rs rename to identity-iota/src/document/properties.rs index b753f04423..5a1a34b6ac 100644 --- a/identity-iota/src/did/doc/properties.rs +++ b/identity-iota/src/document/properties.rs @@ -1,6 +1,10 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::common::Object; use identity_core::common::Timestamp; diff --git a/identity-iota/src/lib.rs b/identity-iota/src/lib.rs index 5d146a0308..bdd126aeec 100644 --- a/identity-iota/src/lib.rs +++ b/identity-iota/src/lib.rs @@ -17,22 +17,14 @@ // clippy::missing_errors_doc, )] -#[macro_use] -extern crate lazy_static; - -#[macro_use] -extern crate log; - -#[macro_use] -extern crate serde; +pub use self::error::Error; +pub use self::error::Result; mod resolver; pub mod chain; pub mod credential; pub mod did; +pub mod document; pub mod error; pub mod tangle; - -pub use self::error::Error; -pub use self::error::Result; diff --git a/identity-iota/src/resolver.rs b/identity-iota/src/resolver.rs index 3a5e725261..e0bdc96982 100644 --- a/identity-iota/src/resolver.rs +++ b/identity-iota/src/resolver.rs @@ -12,7 +12,7 @@ use identity_did::resolution::MetaDocument; use identity_did::resolution::ResolverMethod; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::IotaDocument; use crate::tangle::Client; use crate::tangle::ClientMap; use crate::tangle::TangleResolve; diff --git a/identity-iota/src/tangle/client.rs b/identity-iota/src/tangle/client.rs index 86302c5020..758d763ac2 100644 --- a/identity-iota/src/tangle/client.rs +++ b/identity-iota/src/tangle/client.rs @@ -14,9 +14,9 @@ use crate::chain::DiffChain; use crate::chain::DocumentChain; use crate::chain::DocumentHistory; use crate::chain::IntegrationChain; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Error; use crate::error::Result; use crate::tangle::ClientBuilder; @@ -87,11 +87,11 @@ impl Client { .await } - /// Publishes a [`DocumentDiff`] to the Tangle to form part of the diff chain for the integration. + /// Publishes a [`DiffMessage`] to the Tangle to form part of the diff chain for the integration. /// chain message specified by the given [`MessageId`]. /// This method calls `publish_json_with_retry` with its default `interval` and `max_attempts` values for increasing /// the probability that the message will be referenced by a milestone. - pub async fn publish_diff(&self, message_id: &MessageId, diff: &DocumentDiff) -> Result { + pub async fn publish_diff(&self, message_id: &MessageId, diff: &DiffMessage) -> Result { self .publish_json_with_retry(&IotaDocument::diff_index(message_id)?, diff, None, None) .await @@ -154,8 +154,8 @@ impl Client { /// Fetches a [`DocumentChain`] given an [`IotaDID`]. pub async fn read_document_chain(&self, did: &IotaDID) -> Result { - trace!("Read Document Chain: {}", did); - trace!("Integration Chain Address: {}", did.tag()); + log::trace!("Read Document Chain: {}", did); + log::trace!("Integration Chain Address: {}", did.tag()); // Fetch all messages for the integration chain. let messages: Vec = self.read_messages(did.tag()).await?; @@ -172,7 +172,7 @@ impl Client { // let index: String = IotaDocument::diff_index(integration_chain.current_message_id())?; // let messages: Vec = self.read_messages(&index).await?; // - // trace!("Diff Messages: {:#?}", messages); + // log::trace!("Diff Messages: {:#?}", messages); // // DiffChain::try_from_messages(&integration_chain, &messages)? // }; @@ -182,7 +182,7 @@ impl Client { let index: String = IotaDocument::diff_index(integration_chain.current_message_id())?; let messages: Vec = self.read_messages(&index).await?; - trace!("Diff Messages: {:#?}", messages); + log::trace!("Diff Messages: {:#?}", messages); DiffChain::try_from_messages(&integration_chain, &messages)? }; @@ -200,7 +200,7 @@ impl Client { /// /// NOTE: the document must have been published to the Tangle and have a valid message id and /// authentication method. - pub async fn resolve_diff_history(&self, document: &IotaDocument) -> Result> { + pub async fn resolve_diff_history(&self, document: &IotaDocument) -> Result> { let diff_index: String = IotaDocument::diff_index(document.message_id())?; let diff_messages: Vec = self.read_messages(&diff_index).await?; ChainHistory::try_from_raw_messages(document, &diff_messages) diff --git a/identity-iota/src/tangle/client_map.rs b/identity-iota/src/tangle/client_map.rs index 50037734d3..47ea490d63 100644 --- a/identity-iota/src/tangle/client_map.rs +++ b/identity-iota/src/tangle/client_map.rs @@ -6,9 +6,9 @@ use std::sync::Arc; use dashmap::DashMap; use crate::chain::DocumentChain; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::Client; use crate::tangle::ClientBuilder; @@ -61,7 +61,7 @@ impl ClientMap { client.publish_document(document).await } - pub async fn publish_diff(&self, message_id: &MessageId, diff: &DocumentDiff) -> Result { + pub async fn publish_diff(&self, message_id: &MessageId, diff: &DiffMessage) -> Result { let network: Network = diff.id().network()?; let client: Arc = self.client(network).await?; diff --git a/identity-iota/src/tangle/explorer.rs b/identity-iota/src/tangle/explorer.rs index 29deec8966..9f6640b7e5 100644 --- a/identity-iota/src/tangle/explorer.rs +++ b/identity-iota/src/tangle/explorer.rs @@ -6,6 +6,10 @@ use core::fmt::Display; use core::fmt::Formatter; use std::str::FromStr; +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::common::Url; use identity_did::did::DID; @@ -13,7 +17,7 @@ use crate::error::Error; use crate::error::Result; use crate::tangle::MessageId; -lazy_static! { +lazy_static::lazy_static! { static ref EXPLORER_MAIN: ExplorerUrl = ExplorerUrl::new(Url::parse("https://explorer.iota.org/mainnet").unwrap()).unwrap(); static ref EXPLORER_DEV: ExplorerUrl = diff --git a/identity-iota/src/tangle/message/compression_brotli.rs b/identity-iota/src/tangle/message/compression_brotli.rs index 019d5c8bca..20b413d4b0 100644 --- a/identity-iota/src/tangle/message/compression_brotli.rs +++ b/identity-iota/src/tangle/message/compression_brotli.rs @@ -31,7 +31,7 @@ mod test { use identity_core::convert::ToJson; use identity_core::crypto::KeyPair; - use crate::did::IotaDocument; + use crate::document::IotaDocument; use super::*; diff --git a/identity-iota/src/tangle/message/message_ext.rs b/identity-iota/src/tangle/message/message_ext.rs index 9a4528c51d..e5a2bfb54e 100644 --- a/identity-iota/src/tangle/message/message_ext.rs +++ b/identity-iota/src/tangle/message/message_ext.rs @@ -11,9 +11,9 @@ use identity_core::convert::FromJson; use identity_core::convert::ToJson; use identity_did::did::DID; -use crate::did::DocumentDiff; use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::DiffMessage; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::message::compression_brotli; use crate::tangle::DIDMessageEncoding; @@ -131,7 +131,7 @@ impl MessageIdExt for MessageId { pub trait MessageExt { fn try_extract_document(&self, did: &IotaDID) -> Option; - fn try_extract_diff(&self, did: &IotaDID) -> Option; + fn try_extract_diff(&self, did: &IotaDID) -> Option; } impl MessageExt for Message { @@ -139,8 +139,8 @@ impl MessageExt for Message { IotaDocument::try_from_message(self, did) } - fn try_extract_diff(&self, did: &IotaDID) -> Option { - DocumentDiff::try_from_message(self, did) + fn try_extract_diff(&self, did: &IotaDID) -> Option { + DiffMessage::try_from_message(self, did) } } @@ -154,7 +154,7 @@ impl TryFromMessage for IotaDocument { } } -impl TryFromMessage for DocumentDiff { +impl TryFromMessage for DiffMessage { fn try_from_message(message: &Message, did: &IotaDID) -> Option { parse_message(message, did) } @@ -164,7 +164,7 @@ impl TryFromMessage for DocumentDiff { mod test { use identity_core::crypto::KeyPair; - use crate::did::IotaDocument; + use crate::document::IotaDocument; use crate::tangle::message::message_encoding::DIDMessageEncoding; use crate::tangle::MessageId; diff --git a/identity-iota/src/tangle/network.rs b/identity-iota/src/tangle/network.rs index 2459d4cd20..112f04f056 100644 --- a/identity-iota/src/tangle/network.rs +++ b/identity-iota/src/tangle/network.rs @@ -7,6 +7,10 @@ use core::fmt::Formatter; use core::ops::Deref; use std::borrow::Cow; +use serde; +use serde::Deserialize; +use serde::Serialize; + use identity_core::common::Url; use crate::did::IotaDID; @@ -16,7 +20,7 @@ use crate::error::Result; const NETWORK_NAME_MAIN: &str = "main"; const NETWORK_NAME_DEV: &str = "dev"; -lazy_static! { +lazy_static::lazy_static! { static ref NODE_MAIN: Url = Url::parse("https://chrysalis-nodes.iota.org").unwrap(); static ref NODE_DEV: Url = Url::parse("https://api.lb-0.h.chrysalis-devnet.iota.cafe").unwrap(); } diff --git a/identity-iota/src/tangle/publish.rs b/identity-iota/src/tangle/publish.rs index 331524022e..670856b12d 100644 --- a/identity-iota/src/tangle/publish.rs +++ b/identity-iota/src/tangle/publish.rs @@ -5,7 +5,7 @@ use identity_did::verification::MethodRef; use identity_did::verification::MethodType; use identity_did::verification::VerificationMethod; -use crate::did::IotaDocument; +use crate::document::IotaDocument; // Method types allowed to sign a DID document update. pub const UPDATE_METHOD_TYPES: &[MethodType] = &[MethodType::Ed25519VerificationKey2018]; @@ -66,7 +66,7 @@ mod test { use identity_did::did::DID; use identity_did::verification::MethodScope; - use crate::did::IotaVerificationMethod; + use crate::document::IotaVerificationMethod; use crate::tangle::TangleRef; use crate::Result; diff --git a/identity-iota/src/tangle/receipt.rs b/identity-iota/src/tangle/receipt.rs index 8bb04c0ef4..1616a17b2f 100644 --- a/identity-iota/src/tangle/receipt.rs +++ b/identity-iota/src/tangle/receipt.rs @@ -1,6 +1,10 @@ // Copyright 2020-2021 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +use serde; +use serde::Deserialize; +use serde::Serialize; + use crate::tangle::Message; use crate::tangle::MessageId; use crate::tangle::Network; diff --git a/identity-iota/src/tangle/traits.rs b/identity-iota/src/tangle/traits.rs index 92999aecb2..ea1954cfd4 100644 --- a/identity-iota/src/tangle/traits.rs +++ b/identity-iota/src/tangle/traits.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use crate::did::IotaDID; -use crate::did::IotaDocument; +use crate::document::IotaDocument; use crate::error::Result; use crate::tangle::MessageId; diff --git a/identity/benches/diff_chain.rs b/identity/benches/diff_chain.rs index c519cbb520..19b1903cc4 100644 --- a/identity/benches/diff_chain.rs +++ b/identity/benches/diff_chain.rs @@ -9,8 +9,8 @@ use identity::did::MethodData; use identity::did::MethodRef; use identity::did::MethodType; use identity::did::DID; +use identity::iota::DiffMessage; use identity::iota::DocumentChain; -use identity::iota::DocumentDiff; use identity::iota::IntegrationChain; use identity::iota::IotaDocument; use identity::iota::MessageId; @@ -45,7 +45,7 @@ pub fn update_diff_chain(n: usize, chain: &mut DocumentChain, keypair: &KeyPair) }; let message_id = *chain.diff_message_id(); - let mut diff: DocumentDiff = chain + let mut diff: DiffMessage = chain .current() .diff( &new, diff --git a/identity/src/lib.rs b/identity/src/lib.rs index 767b5f4a03..7c240d2e9d 100644 --- a/identity/src/lib.rs +++ b/identity/src/lib.rs @@ -71,6 +71,7 @@ pub mod iota { pub use identity_iota::chain::*; pub use identity_iota::credential::*; pub use identity_iota::did::*; + pub use identity_iota::document::*; pub use identity_iota::error::*; pub use identity_iota::tangle::*; @@ -110,7 +111,7 @@ pub mod prelude { //! Prelude of commonly used types pub use identity_core::crypto::KeyPair; - pub use identity_iota::did::IotaDocument; + pub use identity_iota::document::IotaDocument; pub use identity_iota::tangle::Client; pub use identity_iota::Result; }