Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions packages/rs-dpp/src/data_contract/accessors/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,20 @@ impl DataContractV1Getters for DataContract {
}
}

fn description(&self) -> Option<&String> {
match self {
DataContract::V0(_) => None,
DataContract::V1(v1) => v1.description.as_ref(),
}
}

fn description_mut(&mut self) -> Option<&mut String> {
match self {
DataContract::V0(_) => None,
DataContract::V1(v1) => v1.description.as_mut(),
}
}

/// Returns the timestamp in milliseconds when the contract was created.
fn created_at(&self) -> Option<TimestampMillis> {
match self {
Expand Down Expand Up @@ -422,4 +436,11 @@ impl DataContractV1Setters for DataContract {
v1.keywords = keywords;
}
}

/// Sets the description for the contract.
fn set_description(&mut self, description: Option<String>) {
if let DataContract::V1(v1) = self {
v1.description = description;
}
}
}
9 changes: 9 additions & 0 deletions packages/rs-dpp/src/data_contract/accessors/v1/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ pub trait DataContractV1Getters: DataContractV0Getters {

/// Returns a mutable reference to the keywords for the contract.
fn keywords_mut(&mut self) -> Option<&mut Vec<String>>;

/// Returns the description for the contract.
fn description(&self) -> Option<&String>;

/// Returns a mutable reference to the description for the contract.
fn description_mut(&mut self) -> Option<&mut String>;
}

pub trait DataContractV1Setters: DataContractV0Setters {
Expand Down Expand Up @@ -104,4 +110,7 @@ pub trait DataContractV1Setters: DataContractV0Setters {

/// Sets the keywords for the contract.
fn set_keywords(&mut self, keywords: Vec<String>);

/// Sets the description for the contract.
fn set_description(&mut self, description: Option<String>);
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,13 @@ impl TokenConfigurationV0Getters for TokenConfiguration {
TokenConfiguration::V0(v0) => v0.all_used_group_positions(),
}
}

/// Returns the token description.
fn description(&self) -> &Option<String> {
match self {
TokenConfiguration::V0(v0) => v0.description(),
}
}
}

/// Implementing TokenConfigurationV0Setters for TokenConfiguration
Expand Down Expand Up @@ -240,4 +247,11 @@ impl TokenConfigurationV0Setters for TokenConfiguration {
TokenConfiguration::V0(v0) => v0.set_main_control_group_can_be_modified(action_takers),
}
}

/// Sets the token description.
fn set_description(&mut self, description: Option<String>) {
match self {
TokenConfiguration::V0(v0) => v0.set_description(description),
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@ pub trait TokenConfigurationV0Getters {

/// Returns a mutable reference to the conventions.
fn conventions_mut(&mut self) -> &mut TokenConfigurationConvention;

/// Returns the new tokens destination identity rules.
fn conventions_change_rules(&self) -> &ChangeControlRules;

/// Returns the base supply.
fn base_supply(&self) -> TokenAmount;
/// Returns the base supply.

/// Returns the KeepsHistory rules.
fn keeps_history(&self) -> &TokenKeepsHistoryRules;

/// Returns if we start as paused.
fn start_as_paused(&self) -> bool;

/// Returns the maximum supply.
Expand All @@ -46,8 +50,10 @@ pub trait TokenConfigurationV0Getters {

/// Returns the unfreeze rules.
fn unfreeze_rules(&self) -> &ChangeControlRules;

/// Returns the destroy frozen funds rules.
fn destroy_frozen_funds_rules(&self) -> &ChangeControlRules;

/// Returns the emergency action rules.
fn emergency_action_rules(&self) -> &ChangeControlRules;

Expand All @@ -59,6 +65,9 @@ pub trait TokenConfigurationV0Getters {

/// Returns all group positions used in the token configuration
fn all_used_group_positions(&self) -> BTreeSet<GroupContractPosition>;

/// Returns the token description.
fn description(&self) -> &Option<String>;
}

/// Accessor trait for setters of `TokenConfigurationV0`
Expand Down Expand Up @@ -92,8 +101,10 @@ pub trait TokenConfigurationV0Setters {

/// Sets the unfreeze rules.
fn set_unfreeze_rules(&mut self, rules: ChangeControlRules);

/// Sets the `destroy frozen funds` rules.
fn set_destroy_frozen_funds_rules(&mut self, rules: ChangeControlRules);

/// Sets the emergency action rules.
fn set_emergency_action_rules(&mut self, rules: ChangeControlRules);

Expand All @@ -102,4 +113,7 @@ pub trait TokenConfigurationV0Setters {

/// Sets the main control group can be modified.
fn set_main_control_group_can_be_modified(&mut self, action_takers: AuthorizedActionTakers);

/// Sets the token description.
fn set_description(&mut self, description: Option<String>);
}
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ impl TokenConfigurationV0Getters for TokenConfigurationV0 {

group_positions
}

/// Returns the token description.
fn description(&self) -> &Option<String> {
&self.description
}
}

/// Implementing `TokenConfigurationV0Setters` for `TokenConfigurationV0`
Expand Down Expand Up @@ -220,4 +225,9 @@ impl TokenConfigurationV0Setters for TokenConfigurationV0 {
fn set_main_control_group_can_be_modified(&mut self, action_takers: AuthorizedActionTakers) {
self.main_control_group_can_be_modified = action_takers;
}

/// Sets the token description.
fn set_description(&mut self, description: Option<String>) {
self.description = description;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ pub struct TokenConfigurationV0 {
pub main_control_group: Option<GroupContractPosition>,
#[serde(default)]
pub main_control_group_can_be_modified: AuthorizedActionTakers,
#[serde(default)]
pub description: Option<String>,
}

// Default function for `keeps_history`
Expand Down Expand Up @@ -265,6 +267,7 @@ impl TokenConfigurationV0 {
.into(),
main_control_group: None,
main_control_group_can_be_modified: AuthorizedActionTakers::NoOne,
description: None,
}
}

Expand Down
7 changes: 7 additions & 0 deletions packages/rs-dpp/src/data_contract/serialized_version/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ impl DataContractInSerializationFormat {
}
}

pub fn description(&self) -> &Option<String> {
match self {
DataContractInSerializationFormat::V0(_) => &None,
DataContractInSerializationFormat::V1(v1) => &v1.description,
}
}

pub fn eq_without_auto_fields(&self, other: &Self) -> bool {
match (self, other) {
(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ pub struct DataContractInSerializationFormatV1 {
/// The contract's keywords for searching
#[serde(default)]
pub keywords: Vec<String>,

/// The contract's description
#[serde(default)]
pub description: Option<String>,
}

fn deserialize_u16_group_map<'de, D>(
Expand Down Expand Up @@ -129,6 +133,7 @@ impl From<DataContract> for DataContractInSerializationFormatV1 {
groups: Default::default(),
tokens: Default::default(),
keywords: Default::default(),
description: None,
}
}
DataContract::V1(v1) => {
Expand All @@ -148,6 +153,7 @@ impl From<DataContract> for DataContractInSerializationFormatV1 {
groups,
tokens,
keywords,
description,
} = v1;

DataContractInSerializationFormatV1 {
Expand All @@ -169,6 +175,7 @@ impl From<DataContract> for DataContractInSerializationFormatV1 {
groups,
tokens,
keywords,
description,
}
}
}
Expand Down
15 changes: 15 additions & 0 deletions packages/rs-dpp/src/data_contract/v1/accessors/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,16 @@ impl DataContractV1Getters for DataContractV1 {
fn keywords_mut(&mut self) -> Option<&mut Vec<String>> {
Some(&mut self.keywords)
}

/// Returns the description of the contract.
fn description(&self) -> Option<&String> {
self.description.as_ref()
}

/// Returns a mutable reference to the description of the contract.
fn description_mut(&mut self) -> Option<&mut String> {
self.description.as_mut()
}
}

impl DataContractV1Setters for DataContractV1 {
Expand Down Expand Up @@ -287,4 +297,9 @@ impl DataContractV1Setters for DataContractV1 {
fn set_keywords(&mut self, keywords: Vec<String>) {
self.keywords = keywords;
}

/// Sets the description for the contract.
fn set_description(&mut self, description: Option<String>) {
self.description = description;
}
}
3 changes: 3 additions & 0 deletions packages/rs-dpp/src/data_contract/v1/data_contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,7 @@ pub struct DataContractV1 {

/// The contract's keywords for searching
pub keywords: Vec<String>,

/// The contract's description
pub description: Option<String>,
}
3 changes: 3 additions & 0 deletions packages/rs-dpp/src/data_contract/v1/serialization/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ impl DataContractV1 {
groups: Default::default(),
tokens: Default::default(),
keywords: Default::default(),
description: None,
};

Ok(data_contract)
Expand Down Expand Up @@ -139,6 +140,7 @@ impl DataContractV1 {
groups,
tokens,
keywords,
description,
} = data_contract_data;

let document_types = DocumentType::create_document_types_from_document_schemas(
Expand Down Expand Up @@ -168,6 +170,7 @@ impl DataContractV1 {
groups,
tokens,
keywords,
description,
};

Ok(data_contract)
Expand Down
7 changes: 5 additions & 2 deletions packages/rs-dpp/src/errors/consensus/basic/basic_error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ use crate::consensus::basic::{
use crate::consensus::ConsensusError;

use super::data_contract::{
DuplicateKeywordsError, InvalidKeywordEncodingError, InvalidKeywordLengthError,
TooManyKeywordsError,
DuplicateKeywordsError, InvalidDescriptionLengthError, InvalidKeywordEncodingError,
InvalidKeywordLengthError, TooManyKeywordsError,
};
use crate::consensus::basic::group::GroupActionNotAllowedOnTransitionError;
use crate::consensus::basic::overflow_error::OverflowError;
Expand Down Expand Up @@ -531,6 +531,9 @@ pub enum BasicError {

#[error(transparent)]
InvalidKeywordEncodingError(InvalidKeywordEncodingError),

#[error(transparent)]
InvalidDescriptionLengthError(InvalidDescriptionLengthError),
}

impl From<BasicError> for ConsensusError {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
use crate::consensus::basic::BasicError;
use crate::consensus::ConsensusError;
use crate::errors::ProtocolError;
use bincode::{Decode, Encode};
use platform_serialization_derive::{PlatformDeserialize, PlatformSerialize};
use thiserror::Error;

#[derive(
Error, Debug, Clone, PartialEq, Eq, Encode, Decode, PlatformSerialize, PlatformDeserialize,
)]
#[error("Data contract {} has description with invalid length: '{}'. Valid length is between 3 and 100 characters.", contract_id, description.len())]
#[platform_serialize(unversioned)]
pub struct InvalidDescriptionLengthError {
/*

DO NOT CHANGE ORDER OF FIELDS WITHOUT INTRODUCING OF NEW VERSION

*/
contract_id: String,
description: String,
}

impl InvalidDescriptionLengthError {
pub fn new(contract_id: String, description: String) -> Self {
Self {
contract_id,
description,
}
}

pub fn contract_id(&self) -> &str {
&self.contract_id
}

pub fn description(&self) -> &str {
&self.description
}
}

impl From<InvalidDescriptionLengthError> for ConsensusError {
fn from(err: InvalidDescriptionLengthError) -> Self {
Self::BasicError(BasicError::InvalidDescriptionLengthError(err))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ mod incompatible_re2_pattern_error;
mod invalid_compound_index_error;
mod invalid_data_contract_id_error;
mod invalid_data_contract_version_error;
mod invalid_description_length_error;
mod invalid_document_type_name_error;
mod invalid_document_type_required_security_level;
mod invalid_index_property_type_error;
Expand Down Expand Up @@ -81,6 +82,7 @@ pub use group_non_unilateral_member_power_has_less_than_required_power_error::*;
pub use group_position_does_not_exist_error::*;
pub use group_total_power_has_less_than_required_power_error::*;
pub use incompatible_document_type_schema_error::*;
pub use invalid_description_length_error::*;
pub use invalid_document_type_name_error::*;
pub use invalid_keyword_encoding_error::*;
pub use invalid_keyword_length_error::*;
Expand Down
1 change: 1 addition & 0 deletions packages/rs-dpp/src/errors/consensus/codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ impl ErrorWithCode for BasicError {
Self::DuplicateKeywordsError(_) => 10263,
Self::InvalidKeywordLengthError(_) => 10264,
Self::InvalidKeywordEncodingError(_) => 10265,
Self::InvalidDescriptionLengthError(_) => 10266,

// Group Errors: 10350-10399
Self::GroupPositionDoesNotExistError(_) => 10350,
Expand Down
Loading