@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.toml +3 -0
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/lib/dpp.d.ts +9 -0
- package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
- package/dist/lib/errors/DPPError.d.ts +5 -0
- package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
- package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
- package/dist/{index.d.ts → lib/index.d.ts} +1 -1
- package/dist/lib/utils/extend.d.ts +1 -0
- package/dist/wasm/wasm_dpp.d.ts +1595 -518
- package/karma.conf.js +5 -0
- package/lib/dpp.ts +24 -0
- package/lib/errors/AbstractConsensusError.ts +13 -0
- package/lib/errors/DPPError.ts +15 -0
- package/lib/errors/patchConsensusErrors.ts +175 -0
- package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
- package/{index.ts → lib/index.ts} +5 -4
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/expect/expectError.js +4 -2
- package/lib/test/mocks/getBlsAdapterMock.js +36 -0
- package/lib/test/utils/newDocumentsContainer.js +36 -0
- package/lib/utils/extend.ts +6 -0
- package/package.json +9 -6
- package/src/bls_adapter.rs +16 -1
- package/src/data_contract/data_contract.rs +35 -7
- package/src/data_contract/errors/invalid_data_contract.rs +21 -0
- package/src/data_contract/errors/invalid_document_type.rs +1 -1
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +1 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
- package/src/data_contract/state_transition/mod.rs +2 -0
- package/src/data_contract_factory/data_contract_factory.rs +25 -12
- package/src/document/errors/invalid_document_error.rs +10 -9
- package/src/document/errors/invalid_initial_revision_error.rs +1 -1
- package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
- package/src/document/errors/mod.rs +17 -13
- package/src/document/errors/no_documents_supplied_error.rs +4 -4
- package/src/document/factory.rs +192 -0
- package/src/document/mod.rs +222 -30
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/validator.rs +30 -0
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +4 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
- package/src/errors/consensus/basic/json_schema_error.rs +1 -1
- package/src/errors/consensus_error.rs +15 -8
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +6 -1
- package/src/errors/js_conversion.rs +19 -4
- package/src/errors/mod.rs +3 -0
- package/src/errors/protocol_error.rs +15 -0
- package/src/{identifier.rs → identifier/mod.rs} +48 -3
- package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
- package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
- package/src/identity/errors/mod.rs +7 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
- package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
- package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
- package/src/{identity.rs → identity/mod.rs} +20 -12
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
- package/src/identity/state_transition/mod.rs +9 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
- package/src/identity/validation/mod.rs +3 -0
- package/src/identity/validation/public_keys_validator.rs +76 -0
- package/src/identity_public_key/public_keys_validator.rs +1 -1
- package/src/lib.rs +3 -6
- package/src/lodash.rs +7 -0
- package/src/state_repository.rs +188 -36
- package/src/state_transition/mod.rs +12 -0
- package/src/utils.rs +102 -7
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +5 -0
- package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +26 -0
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
- package/test/unit/dataContract/DataContract.spec.js +5 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
- package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
- package/test/unit/document/Document.spec.js +147 -155
- package/test/unit/document/DocumentFactory.spec.js +325 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
- package/test/unit/identity/Identity.spec.js +2 -2
- package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
- package/tsconfig.json +1 -1
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +1595 -518
- package/wasm/wasm_dpp.js +5007 -2172
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
- package/webpack.config.js +10 -1
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
use dpp::{data_contract::
|
|
1
|
+
use dpp::{data_contract::document_type::IndexProperty, util::json_schema::Index};
|
|
2
|
+
use serde::{ser::SerializeMap, Serialize, Serializer};
|
|
2
3
|
use wasm_bindgen::prelude::*;
|
|
3
4
|
|
|
5
|
+
use crate::{errors::RustConversionError, with_js_error};
|
|
6
|
+
|
|
4
7
|
#[wasm_bindgen(js_name=IndexProperty)]
|
|
5
8
|
#[derive(Debug, Clone)]
|
|
6
9
|
pub struct IndexPropertyWasm {
|
|
@@ -38,6 +41,51 @@ impl From<Index> for IndexDefinitionWasm {
|
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
|
|
44
|
+
/// Wrapper structure to serialize `Index` the way js-dpp expects it.
|
|
45
|
+
#[derive(Debug)]
|
|
46
|
+
struct IndexSerializeJs<'a>(&'a Index);
|
|
47
|
+
|
|
48
|
+
impl Serialize for IndexSerializeJs<'_> {
|
|
49
|
+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
50
|
+
where
|
|
51
|
+
S: Serializer,
|
|
52
|
+
{
|
|
53
|
+
let mut map = serializer.serialize_map(Some(3))?;
|
|
54
|
+
map.serialize_entry("name", &self.0.name)?;
|
|
55
|
+
if self.0.unique {
|
|
56
|
+
map.serialize_entry("unique", &true)?;
|
|
57
|
+
}
|
|
58
|
+
map.serialize_entry(
|
|
59
|
+
"properties",
|
|
60
|
+
&self
|
|
61
|
+
.0
|
|
62
|
+
.properties
|
|
63
|
+
.iter()
|
|
64
|
+
.map(IndexPropertySerializeJs)
|
|
65
|
+
.collect::<Vec<_>>(),
|
|
66
|
+
)?;
|
|
67
|
+
|
|
68
|
+
map.end()
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// Wrapper structure to serialize `InderProperty` the way js-dpp expects it.
|
|
73
|
+
#[derive(Debug)]
|
|
74
|
+
struct IndexPropertySerializeJs<'a>(&'a IndexProperty);
|
|
75
|
+
|
|
76
|
+
impl Serialize for IndexPropertySerializeJs<'_> {
|
|
77
|
+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
78
|
+
where
|
|
79
|
+
S: Serializer,
|
|
80
|
+
{
|
|
81
|
+
let mut map = serializer.serialize_map(Some(1))?;
|
|
82
|
+
let order_str = if self.0.ascending { "asc" } else { "desc" };
|
|
83
|
+
map.serialize_entry(&self.0.name, order_str)?;
|
|
84
|
+
|
|
85
|
+
map.end()
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
41
89
|
#[wasm_bindgen(js_class=IndexDefinition)]
|
|
42
90
|
impl IndexDefinitionWasm {
|
|
43
91
|
#[wasm_bindgen(js_name=getName)]
|
|
@@ -58,4 +106,11 @@ impl IndexDefinitionWasm {
|
|
|
58
106
|
pub fn is_unique(&self) -> bool {
|
|
59
107
|
self.inner.unique
|
|
60
108
|
}
|
|
109
|
+
|
|
110
|
+
#[wasm_bindgen(js_name=toObject)]
|
|
111
|
+
pub fn to_object(&self) -> Result<JsValue, JsValue> {
|
|
112
|
+
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
113
|
+
let object = with_js_error!(IndexSerializeJs(&self.inner).serialize(&serializer))?;
|
|
114
|
+
Ok(object)
|
|
115
|
+
}
|
|
61
116
|
}
|
package/src/data_contract/mod.rs
CHANGED
|
@@ -14,10 +14,8 @@ use serde::{Deserialize, Serialize};
|
|
|
14
14
|
use wasm_bindgen::prelude::*;
|
|
15
15
|
|
|
16
16
|
use crate::{
|
|
17
|
-
buffer::Buffer,
|
|
18
|
-
|
|
19
|
-
identifier::IdentifierWrapper,
|
|
20
|
-
with_js_error, DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
|
|
17
|
+
buffer::Buffer, errors::from_dpp_err, identifier::IdentifierWrapper, with_js_error,
|
|
18
|
+
DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
|
|
21
19
|
};
|
|
22
20
|
|
|
23
21
|
#[wasm_bindgen(js_name=DataContractCreateTransition)]
|
|
@@ -29,9 +27,9 @@ impl From<DataContractCreateTransition> for DataContractCreateTransitionWasm {
|
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
|
|
32
|
-
impl
|
|
33
|
-
fn
|
|
34
|
-
|
|
30
|
+
impl From<DataContractCreateTransitionWasm> for DataContractCreateTransition {
|
|
31
|
+
fn from(val: DataContractCreateTransitionWasm) -> Self {
|
|
32
|
+
val.0
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -69,7 +67,7 @@ impl DataContractCreateTransitionWasm {
|
|
|
69
67
|
|
|
70
68
|
#[wasm_bindgen(js_name=getProtocolVersion)]
|
|
71
69
|
pub fn get_protocol_version(&self) -> u32 {
|
|
72
|
-
self.0.protocol_version
|
|
70
|
+
self.0.protocol_version
|
|
73
71
|
}
|
|
74
72
|
|
|
75
73
|
#[wasm_bindgen(js_name=getEntropy)]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
use dpp::data_contract::state_transition::data_contract_create_transition::validation::state::validate_data_contract_create_transition_state::validate_data_contract_create_transition_state as dpp_validate_data_contract_create_transition_state;
|
|
2
2
|
use wasm_bindgen::prelude::*;
|
|
3
3
|
|
|
4
|
+
use crate::validation::ValidationResultWasm;
|
|
4
5
|
use crate::{
|
|
5
6
|
errors::from_dpp_err,
|
|
6
7
|
state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
|
|
7
|
-
validation_result::ValidationResultWasm,
|
|
8
8
|
DataContractCreateTransitionWasm,
|
|
9
9
|
};
|
|
10
10
|
|
|
@@ -14,11 +14,11 @@ pub async fn validate_data_contract_create_transition_state(
|
|
|
14
14
|
state_transition: DataContractCreateTransitionWasm,
|
|
15
15
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
16
16
|
let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
|
|
17
|
-
dpp_validate_data_contract_create_transition_state(
|
|
17
|
+
let validation_result = dpp_validate_data_contract_create_transition_state(
|
|
18
18
|
&wrapped_state_repository,
|
|
19
19
|
&state_transition.into(),
|
|
20
20
|
)
|
|
21
21
|
.await
|
|
22
|
-
.
|
|
23
|
-
.
|
|
22
|
+
.map_err(from_dpp_err)?;
|
|
23
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
24
24
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
use std::ops::Deref;
|
|
2
|
+
|
|
3
|
+
use dpp::data_contract::state_transition::apply_data_contract_update_transition_factory::ApplyDataContractUpdateTransition;
|
|
4
|
+
use wasm_bindgen::prelude::*;
|
|
5
|
+
|
|
6
|
+
use crate::{
|
|
7
|
+
state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
|
|
8
|
+
DataContractUpdateTransitionWasm,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
#[wasm_bindgen(js_name=ApplyDataContractUpdateTransition)]
|
|
12
|
+
pub struct ApplyDataContractUpdateTransitionWasm(
|
|
13
|
+
ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
impl From<ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>>
|
|
17
|
+
for ApplyDataContractUpdateTransitionWasm
|
|
18
|
+
{
|
|
19
|
+
fn from(wa: ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>) -> Self {
|
|
20
|
+
ApplyDataContractUpdateTransitionWasm(wa)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#[wasm_bindgen(js_class=ApplyDataContractUpdateTransition)]
|
|
25
|
+
impl ApplyDataContractUpdateTransitionWasm {
|
|
26
|
+
#[wasm_bindgen(constructor)]
|
|
27
|
+
pub fn new(
|
|
28
|
+
state_repository: ExternalStateRepositoryLike,
|
|
29
|
+
) -> ApplyDataContractUpdateTransitionWasm {
|
|
30
|
+
let pinned_js_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
|
|
31
|
+
ApplyDataContractUpdateTransition::new(pinned_js_state_repository).into()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#[wasm_bindgen(js_name=applyDataContractUpdateTransition)]
|
|
35
|
+
pub async fn apply_data_contract_update_transition(
|
|
36
|
+
&self,
|
|
37
|
+
transition: DataContractUpdateTransitionWasm,
|
|
38
|
+
) -> Result<(), JsError> {
|
|
39
|
+
self.0
|
|
40
|
+
.apply_data_contract_update_transition(&transition.into())
|
|
41
|
+
.await
|
|
42
|
+
.map_err(|e| e.deref().into())
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
mod apply;
|
|
2
|
+
mod validation;
|
|
3
|
+
|
|
4
|
+
pub use apply::*;
|
|
5
|
+
pub use validation::*;
|
|
6
|
+
|
|
7
|
+
use dpp::{
|
|
8
|
+
data_contract::state_transition::DataContractUpdateTransition,
|
|
9
|
+
state_transition::{
|
|
10
|
+
StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
use serde::{Deserialize, Serialize};
|
|
14
|
+
use wasm_bindgen::prelude::*;
|
|
15
|
+
|
|
16
|
+
use crate::{
|
|
17
|
+
buffer::Buffer, errors::from_dpp_err, identifier::IdentifierWrapper, with_js_error,
|
|
18
|
+
DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
#[wasm_bindgen(js_name=DataContractUpdateTransition)]
|
|
22
|
+
pub struct DataContractUpdateTransitionWasm(DataContractUpdateTransition);
|
|
23
|
+
|
|
24
|
+
impl From<DataContractUpdateTransition> for DataContractUpdateTransitionWasm {
|
|
25
|
+
fn from(v: DataContractUpdateTransition) -> Self {
|
|
26
|
+
DataContractUpdateTransitionWasm(v)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
impl From<DataContractUpdateTransitionWasm> for DataContractUpdateTransition {
|
|
31
|
+
fn from(val: DataContractUpdateTransitionWasm) -> Self {
|
|
32
|
+
val.0
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#[derive(Debug, Serialize, Deserialize)]
|
|
37
|
+
#[serde(rename_all = "camelCase")]
|
|
38
|
+
struct DataContractUpdateTransitionParameters {
|
|
39
|
+
protocol_version: u32,
|
|
40
|
+
#[serde(skip_serializing_if = "Option::is_none", default)]
|
|
41
|
+
data_contract: Option<DataContractParameters>,
|
|
42
|
+
#[serde(skip_serializing_if = "Option::is_none", default)]
|
|
43
|
+
entropy: Option<Vec<u8>>,
|
|
44
|
+
#[serde(skip_serializing_if = "Option::is_none", default)]
|
|
45
|
+
signature_public_key_id: Option<u64>,
|
|
46
|
+
#[serde(skip_serializing_if = "Option::is_none", default)]
|
|
47
|
+
signature: Option<Vec<u8>>,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#[wasm_bindgen(js_class=DataContractUpdateTransition)]
|
|
51
|
+
impl DataContractUpdateTransitionWasm {
|
|
52
|
+
#[wasm_bindgen(constructor)]
|
|
53
|
+
pub fn new(raw_parameters: JsValue) -> Result<DataContractUpdateTransitionWasm, JsValue> {
|
|
54
|
+
let parameters: DataContractUpdateTransitionParameters =
|
|
55
|
+
with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
|
|
56
|
+
DataContractUpdateTransition::from_raw_object(
|
|
57
|
+
serde_json::to_value(parameters).expect("the struct will be a valid json"),
|
|
58
|
+
)
|
|
59
|
+
.map(Into::into)
|
|
60
|
+
.map_err(from_dpp_err)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#[wasm_bindgen(js_name=getDataContract)]
|
|
64
|
+
pub fn get_data_contract(&self) -> DataContractWasm {
|
|
65
|
+
self.0.data_contract.clone().into()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#[wasm_bindgen(js_name=getProtocolVersion)]
|
|
69
|
+
pub fn get_protocol_version(&self) -> u32 {
|
|
70
|
+
self.0.protocol_version
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[wasm_bindgen(js_name=getEntropy)]
|
|
74
|
+
pub fn get_entropy(&self) -> Buffer {
|
|
75
|
+
Buffer::from_bytes(&self.0.data_contract.entropy)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#[wasm_bindgen(js_name=getOwnerId)]
|
|
79
|
+
pub fn get_owner_id(&self) -> IdentifierWrapper {
|
|
80
|
+
self.0.get_owner_id().clone().into()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#[wasm_bindgen(js_name=getType)]
|
|
84
|
+
pub fn get_type(&self) -> u32 {
|
|
85
|
+
self.0.get_type() as u32
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#[wasm_bindgen(js_name=toJSON)]
|
|
89
|
+
pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
|
|
90
|
+
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
91
|
+
Ok(self
|
|
92
|
+
.0
|
|
93
|
+
.to_json(skip_signature.unwrap_or(false))
|
|
94
|
+
.map_err(from_dpp_err)?
|
|
95
|
+
.serialize(&serializer)
|
|
96
|
+
.expect("JSON is a valid object"))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
#[wasm_bindgen(js_name=toBuffer)]
|
|
100
|
+
pub fn to_buffer(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
|
|
101
|
+
let bytes = self
|
|
102
|
+
.0
|
|
103
|
+
.to_buffer(skip_signature.unwrap_or(false))
|
|
104
|
+
.map_err(from_dpp_err)?;
|
|
105
|
+
Ok(Buffer::from_bytes(&bytes))
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
#[wasm_bindgen(js_name=getModifiedDataIds)]
|
|
109
|
+
pub fn get_modified_data_ids(&self) -> Vec<JsValue> {
|
|
110
|
+
self.0
|
|
111
|
+
.get_modified_data_ids()
|
|
112
|
+
.into_iter()
|
|
113
|
+
.map(|identifier| Into::<IdentifierWrapper>::into(identifier.clone()).into())
|
|
114
|
+
.collect()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
#[wasm_bindgen(js_name=isDataContractStateTransition)]
|
|
118
|
+
pub fn is_data_contract_state_transition(&self) -> bool {
|
|
119
|
+
self.0.is_data_contract_state_transition()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#[wasm_bindgen(js_name=isDocumentStateTransition)]
|
|
123
|
+
pub fn is_document_state_transition(&self) -> bool {
|
|
124
|
+
self.0.is_document_state_transition()
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
#[wasm_bindgen(js_name=isIdentityStateTransition)]
|
|
128
|
+
pub fn is_identity_state_transition(&self) -> bool {
|
|
129
|
+
self.0.is_identity_state_transition()
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
#[wasm_bindgen(js_name=setExecutionContext)]
|
|
133
|
+
pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
|
|
134
|
+
self.0.set_execution_context(context.into())
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
#[wasm_bindgen(js_name=hash)]
|
|
138
|
+
pub fn hash(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
|
|
139
|
+
let bytes = self
|
|
140
|
+
.0
|
|
141
|
+
.hash(skip_signature.unwrap_or(false))
|
|
142
|
+
.map_err(from_dpp_err)?;
|
|
143
|
+
Ok(Buffer::from_bytes(&bytes))
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
use std::collections::BTreeMap;
|
|
2
|
+
|
|
3
|
+
use dpp::data_contract::state_transition::data_contract_update_transition::validation::{
|
|
4
|
+
basic::validate_indices_are_backward_compatible as dpp_validate_indices_are_backward_compatible,
|
|
5
|
+
state::validate_data_contract_update_transition_state::validate_data_contract_update_transition_state as dpp_validate_data_contract_update_transition_state,
|
|
6
|
+
};
|
|
7
|
+
use wasm_bindgen::prelude::*;
|
|
8
|
+
|
|
9
|
+
use crate::{
|
|
10
|
+
errors::{from_dpp_err, protocol_error::from_protocol_error},
|
|
11
|
+
state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
|
|
12
|
+
validation::ValidationResultWasm,
|
|
13
|
+
DataContractUpdateTransitionWasm,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
#[wasm_bindgen(js_name=validateDataContractUpdateTransitionState)]
|
|
17
|
+
pub async fn validate_data_contract_update_transition_state(
|
|
18
|
+
state_repository: ExternalStateRepositoryLike,
|
|
19
|
+
state_transition: DataContractUpdateTransitionWasm,
|
|
20
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
21
|
+
let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
|
|
22
|
+
let result = dpp_validate_data_contract_update_transition_state(
|
|
23
|
+
&wrapped_state_repository,
|
|
24
|
+
&state_transition.into(),
|
|
25
|
+
)
|
|
26
|
+
.await
|
|
27
|
+
.map_err(from_dpp_err)?;
|
|
28
|
+
|
|
29
|
+
Ok(result.map(|_| JsValue::undefined()).into())
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#[wasm_bindgen(js_name=validateIndicesAreBackwardCompatible)]
|
|
33
|
+
pub fn validate_indices_are_backward_compatible(
|
|
34
|
+
old_documents_schema: JsValue,
|
|
35
|
+
new_documents_schema: JsValue,
|
|
36
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
37
|
+
let old_documents = serde_wasm_bindgen::from_value::<BTreeMap<String, serde_json::Value>>(
|
|
38
|
+
old_documents_schema,
|
|
39
|
+
)?;
|
|
40
|
+
let new_documents = serde_wasm_bindgen::from_value::<BTreeMap<String, serde_json::Value>>(
|
|
41
|
+
new_documents_schema,
|
|
42
|
+
)?;
|
|
43
|
+
|
|
44
|
+
let result =
|
|
45
|
+
dpp_validate_indices_are_backward_compatible(old_documents.iter(), new_documents.iter())
|
|
46
|
+
.map_err(from_protocol_error)?;
|
|
47
|
+
|
|
48
|
+
Ok(result.map(|_| JsValue::undefined()).into())
|
|
49
|
+
}
|
|
@@ -12,7 +12,10 @@ use wasm_bindgen::prelude::*;
|
|
|
12
12
|
|
|
13
13
|
use crate::{
|
|
14
14
|
data_contract::errors::InvalidDataContractError,
|
|
15
|
-
errors::{
|
|
15
|
+
errors::{
|
|
16
|
+
consensus_error::from_consensus_error, from_dpp_err, protocol_error::from_protocol_error,
|
|
17
|
+
},
|
|
18
|
+
validation::ValidationResultWasm,
|
|
16
19
|
with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm,
|
|
17
20
|
};
|
|
18
21
|
|
|
@@ -25,9 +28,9 @@ impl From<DataContractValidator> for DataContractValidatorWasm {
|
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
impl
|
|
29
|
-
fn
|
|
30
|
-
|
|
31
|
+
impl From<DataContractValidatorWasm> for DataContractValidator {
|
|
32
|
+
fn from(val: DataContractValidatorWasm) -> Self {
|
|
33
|
+
val.0
|
|
31
34
|
}
|
|
32
35
|
}
|
|
33
36
|
|
|
@@ -37,6 +40,16 @@ impl DataContractValidatorWasm {
|
|
|
37
40
|
pub fn new() -> Self {
|
|
38
41
|
DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into()
|
|
39
42
|
}
|
|
43
|
+
|
|
44
|
+
#[wasm_bindgen]
|
|
45
|
+
pub fn validate(&self, raw_data_contract: JsValue) -> Result<ValidationResultWasm, JsValue> {
|
|
46
|
+
let parameters: DataContractParameters =
|
|
47
|
+
with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?;
|
|
48
|
+
let json_object = serde_json::to_value(parameters).expect("Implements Serialize");
|
|
49
|
+
let validation_result = self.0.validate(&json_object).map_err(from_protocol_error)?;
|
|
50
|
+
|
|
51
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
52
|
+
}
|
|
40
53
|
}
|
|
41
54
|
|
|
42
55
|
#[wasm_bindgen(js_name=DataContractFactory)]
|
|
@@ -48,9 +61,9 @@ impl From<DataContractFactory> for DataContractFactoryWasm {
|
|
|
48
61
|
}
|
|
49
62
|
}
|
|
50
63
|
|
|
51
|
-
impl
|
|
52
|
-
fn
|
|
53
|
-
|
|
64
|
+
impl From<DataContractFactoryWasm> for DataContractFactory {
|
|
65
|
+
fn from(val: DataContractFactoryWasm) -> Self {
|
|
66
|
+
val.0
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
69
|
|
|
@@ -65,10 +78,10 @@ extern "C" {
|
|
|
65
78
|
impl EntropyGenerator for ExternalEntropyGenerator {
|
|
66
79
|
fn generate(&self) -> [u8; 32] {
|
|
67
80
|
// TODO: think about changing API to return an error but does it worth it for JS?
|
|
68
|
-
|
|
81
|
+
|
|
82
|
+
ExternalEntropyGenerator::generate(self)
|
|
69
83
|
.try_into()
|
|
70
|
-
.expect("Bad entropy generator provided: should return 32 bytes")
|
|
71
|
-
res
|
|
84
|
+
.expect("Bad entropy generator provided: should return 32 bytes")
|
|
72
85
|
}
|
|
73
86
|
}
|
|
74
87
|
#[wasm_bindgen(js_class=DataContractFactory)]
|
|
@@ -86,7 +99,7 @@ impl DataContractFactoryWasm {
|
|
|
86
99
|
Box::new(external_entropy_generator),
|
|
87
100
|
)
|
|
88
101
|
} else {
|
|
89
|
-
DataContractFactory::new(protocol_version, validate_data_contract.into())
|
|
102
|
+
DataContractFactory::new(protocol_version, validate_data_contract.into())
|
|
90
103
|
}
|
|
91
104
|
.into()
|
|
92
105
|
}
|
|
@@ -139,7 +152,7 @@ impl DataContractFactoryWasm {
|
|
|
139
152
|
.create_from_buffer(buffer, skip_validation.unwrap_or(false))
|
|
140
153
|
.await
|
|
141
154
|
.map(Into::into)
|
|
142
|
-
.map_err(
|
|
155
|
+
.map_err(from_protocol_error)
|
|
143
156
|
}
|
|
144
157
|
|
|
145
158
|
#[wasm_bindgen(js_name=createDataContractCreateTransition)]
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
use thiserror::Error;
|
|
2
2
|
|
|
3
|
-
use crate::DocumentWasm;
|
|
4
|
-
|
|
5
3
|
use super::*;
|
|
6
4
|
|
|
7
5
|
#[wasm_bindgen]
|
|
@@ -10,14 +8,17 @@ use super::*;
|
|
|
10
8
|
pub struct InvalidDocumentError {
|
|
11
9
|
// the point is how we hold all there different types in the Vector
|
|
12
10
|
errors: Vec<JsValue>,
|
|
13
|
-
|
|
11
|
+
raw_document: JsValue,
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
#[wasm_bindgen]
|
|
14
|
+
#[wasm_bindgen(js_class=InvalidDocumentError)]
|
|
17
15
|
impl InvalidDocumentError {
|
|
18
16
|
#[wasm_bindgen(constructor)]
|
|
19
|
-
pub fn new(
|
|
20
|
-
Self {
|
|
17
|
+
pub fn new(raw_document: JsValue, errors: Vec<JsValue>) -> InvalidDocumentError {
|
|
18
|
+
Self {
|
|
19
|
+
raw_document,
|
|
20
|
+
errors,
|
|
21
|
+
}
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
#[wasm_bindgen(js_name=getErrors)]
|
|
@@ -25,8 +26,8 @@ impl InvalidDocumentError {
|
|
|
25
26
|
self.errors.clone()
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
#[wasm_bindgen(js_name=
|
|
29
|
-
pub fn get_document(&self) ->
|
|
30
|
-
self.
|
|
29
|
+
#[wasm_bindgen(js_name=getRawDocument)]
|
|
30
|
+
pub fn get_document(&self) -> JsValue {
|
|
31
|
+
self.raw_document.clone()
|
|
31
32
|
}
|
|
32
33
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
use dpp::prelude::Document;
|
|
2
|
+
use itertools::Itertools;
|
|
1
3
|
use thiserror::Error;
|
|
2
4
|
|
|
3
5
|
use crate::DocumentWasm;
|
|
@@ -7,21 +9,29 @@ use super::*;
|
|
|
7
9
|
#[wasm_bindgen]
|
|
8
10
|
#[derive(Error, Debug)]
|
|
9
11
|
#[error("Documents have mixed owner ids")]
|
|
10
|
-
pub struct
|
|
12
|
+
pub struct MismatchOwnerIdsError {
|
|
11
13
|
documents: Vec<DocumentWasm>,
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
#[wasm_bindgen]
|
|
15
|
-
impl
|
|
17
|
+
impl MismatchOwnerIdsError {
|
|
16
18
|
#[wasm_bindgen(constructor)]
|
|
17
|
-
pub fn new(documents: Vec<JsValue>) ->
|
|
19
|
+
pub fn new(documents: Vec<JsValue>) -> MismatchOwnerIdsError {
|
|
18
20
|
Self {
|
|
19
21
|
documents: into_vec_of(&documents),
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
#[wasm_bindgen(js_name=
|
|
25
|
+
#[wasm_bindgen(js_name=getDocuments)]
|
|
24
26
|
pub fn get_documents(&self) -> Vec<JsValue> {
|
|
25
27
|
to_vec_js(self.documents.clone())
|
|
26
28
|
}
|
|
27
29
|
}
|
|
30
|
+
|
|
31
|
+
impl MismatchOwnerIdsError {
|
|
32
|
+
pub fn from_documents(documents: Vec<Document>) -> MismatchOwnerIdsError {
|
|
33
|
+
Self {
|
|
34
|
+
documents: documents.into_iter().map(DocumentWasm::from).collect_vec(),
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
use serde::Serialize;
|
|
1
2
|
use wasm_bindgen::prelude::*;
|
|
2
3
|
|
|
3
4
|
pub use document_already_exists_error::*;
|
|
@@ -11,7 +12,7 @@ pub use mismatch_owners_ids_error::*;
|
|
|
11
12
|
pub use no_documents_supplied_error::*;
|
|
12
13
|
|
|
13
14
|
use crate::errors::consensus_error::from_consensus_error;
|
|
14
|
-
use crate::
|
|
15
|
+
use crate::utils::*;
|
|
15
16
|
|
|
16
17
|
mod document_already_exists_error;
|
|
17
18
|
mod document_not_provided_error;
|
|
@@ -24,32 +25,35 @@ mod no_documents_supplied_error;
|
|
|
24
25
|
|
|
25
26
|
pub fn from_document_to_js_error(e: DocumentError) -> JsValue {
|
|
26
27
|
match e {
|
|
27
|
-
DocumentError::
|
|
28
|
+
DocumentError::DocumentAlreadyExistsError {
|
|
28
29
|
document_transition,
|
|
29
30
|
} => DocumentAlreadyExistsError::new(document_transition).into(),
|
|
30
|
-
DocumentError::
|
|
31
|
+
DocumentError::DocumentNotProvidedError {
|
|
31
32
|
document_transition,
|
|
32
33
|
} => DocumentNotProvidedError::new(document_transition).into(),
|
|
33
34
|
|
|
34
|
-
DocumentError::
|
|
35
|
+
DocumentError::InvalidActionNameError { actions } => {
|
|
35
36
|
InvalidActionNameError::new(to_vec_js(actions)).into()
|
|
36
37
|
}
|
|
37
|
-
DocumentError::
|
|
38
|
-
|
|
38
|
+
DocumentError::InvalidDocumentError {
|
|
39
|
+
errors,
|
|
40
|
+
raw_document,
|
|
41
|
+
} => InvalidDocumentError::new(
|
|
42
|
+
raw_document
|
|
43
|
+
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
|
|
44
|
+
.expect("Raw Document should be serializable into JsValue"),
|
|
39
45
|
errors.into_iter().map(from_consensus_error).collect(),
|
|
40
46
|
)
|
|
41
47
|
.into(),
|
|
42
|
-
DocumentError::
|
|
48
|
+
DocumentError::InvalidDocumentActionError {
|
|
43
49
|
document_transition,
|
|
44
50
|
} => InvalidDocumentActionError::new(document_transition).into(),
|
|
45
|
-
DocumentError::
|
|
51
|
+
DocumentError::InvalidInitialRevisionError { document } => {
|
|
46
52
|
InvalidInitialRevisionError::new((*document).into()).into()
|
|
47
53
|
}
|
|
48
|
-
DocumentError::
|
|
49
|
-
|
|
50
|
-
documents.into_iter().map(DocumentWasm::from).collect();
|
|
51
|
-
MismatchOwnersIdsError::new(to_vec_js(documents_wasm)).into()
|
|
54
|
+
DocumentError::MismatchOwnerIdsError { documents } => {
|
|
55
|
+
MismatchOwnerIdsError::from_documents(documents).into()
|
|
52
56
|
}
|
|
53
|
-
DocumentError::
|
|
57
|
+
DocumentError::NoDocumentsSuppliedError => NoDocumentsSuppliedError::new().into(),
|
|
54
58
|
}
|
|
55
59
|
}
|
|
@@ -5,17 +5,17 @@ use super::*;
|
|
|
5
5
|
#[wasm_bindgen]
|
|
6
6
|
#[derive(Error, Debug)]
|
|
7
7
|
#[error("No documents were supplied to state transition")]
|
|
8
|
-
pub struct
|
|
8
|
+
pub struct NoDocumentsSuppliedError {}
|
|
9
9
|
|
|
10
10
|
#[wasm_bindgen]
|
|
11
|
-
impl
|
|
11
|
+
impl NoDocumentsSuppliedError {
|
|
12
12
|
#[wasm_bindgen(constructor)]
|
|
13
13
|
pub fn new() -> Self {
|
|
14
|
-
|
|
14
|
+
NoDocumentsSuppliedError {}
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
impl Default for
|
|
18
|
+
impl Default for NoDocumentsSuppliedError {
|
|
19
19
|
fn default() -> Self {
|
|
20
20
|
Self::new()
|
|
21
21
|
}
|