Skip to content

Commit 4bbc8ae

Browse files
bkioshnMr-Leshiy
andauthored
fix(rust/signed-doc): Update doc type (#365)
* fix(signed-doc): log and to value Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): add from doctype to vec uuid Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): add more doc type Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): from doctype for vec string Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): revert Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): revert Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): backward compatible rule Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): remove unused doc type Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): improve static doc types Signed-off-by: bkioshn <bkioshn@gmail.com> * fix(signed-doc): add more doc-types Signed-off-by: bkioshn <bkioshn@gmail.com> --------- Signed-off-by: bkioshn <bkioshn@gmail.com> Co-authored-by: Alex Pozhylenkov <leshiy12345678@gmail.com>
1 parent 4ee0dc5 commit 4bbc8ae

File tree

7 files changed

+219
-89
lines changed

7 files changed

+219
-89
lines changed

rust/signed_doc/src/doc_types/mod.rs

Lines changed: 90 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,52 +4,123 @@
44
use std::sync::LazyLock;
55

66
use catalyst_types::uuid::Uuid;
7-
use deprecated::{
8-
COMMENT_DOCUMENT_UUID_TYPE, PROPOSAL_ACTION_DOCUMENT_UUID_TYPE, PROPOSAL_DOCUMENT_UUID_TYPE,
9-
};
107

118
use crate::DocType;
129

10+
/// -------------- Document Types --------------
11+
/// Brand document type.
12+
#[allow(clippy::expect_used)]
13+
pub static BRAND_PARAMETERS: LazyLock<DocType> = LazyLock::new(|| {
14+
let ids = &[BRAND_BASE_TYPE];
15+
ids.to_vec()
16+
.try_into()
17+
.expect("Failed to convert brand base types Uuid to DocType")
18+
});
19+
20+
/// Campaign Parameters document type.
21+
#[allow(clippy::expect_used)]
22+
pub static CAMPAIGN_PARAMETERS: LazyLock<DocType> = LazyLock::new(|| {
23+
let ids = &[CAMPAIGN_BASE_TYPE];
24+
ids.to_vec()
25+
.try_into()
26+
.expect("Failed to convert campaign base types Uuid to DocType")
27+
});
28+
29+
/// Category Parameters document type.
30+
#[allow(clippy::expect_used)]
31+
pub static CATEGORY_PARAMETERS: LazyLock<DocType> = LazyLock::new(|| {
32+
let ids = &[CATEGORY_BASE_TYPE];
33+
ids.to_vec()
34+
.try_into()
35+
.expect("Failed to convert category base types Uuid to DocType")
36+
});
37+
1338
/// Proposal document type.
1439
#[allow(clippy::expect_used)]
15-
pub static PROPOSAL_DOC_TYPE: LazyLock<DocType> = LazyLock::new(|| {
16-
let ids = &[PROPOSAL_UUID_TYPE];
40+
pub static PROPOSAL: LazyLock<DocType> = LazyLock::new(|| {
41+
let ids = &[PROPOSAL_BASE_TYPE];
1742
ids.to_vec()
1843
.try_into()
1944
.expect("Failed to convert proposal document Uuid to DocType")
2045
});
2146

2247
/// Proposal comment document type.
2348
#[allow(clippy::expect_used)]
24-
pub static PROPOSAL_COMMENT_DOC: LazyLock<DocType> = LazyLock::new(|| {
25-
let ids = &[COMMENT_UUID_TYPE, PROPOSAL_UUID_TYPE];
49+
pub static PROPOSAL_COMMENT: LazyLock<DocType> = LazyLock::new(|| {
50+
let ids = &[COMMENT_BASE_TYPE, PROPOSAL_BASE_TYPE];
2651
ids.to_vec()
2752
.try_into()
2853
.expect("Failed to convert proposal comment document Uuid to DocType")
2954
});
3055

3156
/// Proposal action document type.
3257
#[allow(clippy::expect_used)]
33-
pub static PROPOSAL_ACTION_DOC: LazyLock<DocType> = LazyLock::new(|| {
58+
pub static PROPOSAL_SUBMISSION_ACTION: LazyLock<DocType> = LazyLock::new(|| {
3459
let ids = &[
35-
ACTION_UUID_TYPE,
36-
PROPOSAL_UUID_TYPE,
37-
SUBMISSION_ACTION_UUID_TYPE,
60+
ACTION_BASE_TYPE,
61+
PROPOSAL_BASE_TYPE,
62+
SUBMISSION_ACTION_BASE_TYPE,
3863
];
3964
ids.to_vec()
4065
.try_into()
4166
.expect("Failed to convert proposal action document Uuid to DocType")
4267
});
4368

44-
/// Submission Action UUID type.
45-
pub const SUBMISSION_ACTION_UUID_TYPE: Uuid =
69+
/// Proposal Comment Meta Template document type.
70+
#[allow(clippy::expect_used)]
71+
pub static PROPOSAL_COMMENT_META_TEMPLATE: LazyLock<DocType> = LazyLock::new(|| {
72+
let ids = &[
73+
TEMPLATE_BASE_TYPE,
74+
TEMPLATE_BASE_TYPE,
75+
COMMENT_BASE_TYPE,
76+
PROPOSAL_BASE_TYPE,
77+
];
78+
ids.to_vec()
79+
.try_into()
80+
.expect("Failed to convert proposal comment meta template document Uuid to DocType")
81+
});
82+
83+
/// Proposal Comment Template document type.
84+
#[allow(clippy::expect_used)]
85+
pub static PROPOSAL_COMMENT_TEMPLATE: LazyLock<DocType> = LazyLock::new(|| {
86+
let ids = &[TEMPLATE_BASE_TYPE, COMMENT_BASE_TYPE, PROPOSAL_BASE_TYPE];
87+
ids.to_vec()
88+
.try_into()
89+
.expect("Failed to convert proposal comment template document Uuid to DocType")
90+
});
91+
92+
/// Proposal Template document type.
93+
#[allow(clippy::expect_used)]
94+
pub static PROPOSAL_TEMPLATE: LazyLock<DocType> = LazyLock::new(|| {
95+
let ids = &[TEMPLATE_BASE_TYPE, PROPOSAL_BASE_TYPE];
96+
ids.to_vec()
97+
.try_into()
98+
.expect("Failed to convert proposal template document Uuid to DocType")
99+
});
100+
101+
/// -------------- Base Types --------------
102+
/// Action UUID base type.
103+
pub const ACTION_BASE_TYPE: Uuid = Uuid::from_u128(0x5E60_E623_AD02_4A1B_A1AC_406D_B978_EE48);
104+
/// Brand UUID base type.
105+
pub const BRAND_BASE_TYPE: Uuid = Uuid::from_u128(0xEBCA_BEEB_5BC5_4F95_91E8_CAB8_CA72_4172);
106+
/// Campaign UUID base type.
107+
pub const CAMPAIGN_BASE_TYPE: Uuid = Uuid::from_u128(0x5EF3_2D5D_F240_462C_A7A4_BA4A_F221_FA23);
108+
/// Category UUID base type.
109+
pub const CATEGORY_BASE_TYPE: Uuid = Uuid::from_u128(0x8189_38C3_3139_4DAA_AFE6_974C_7848_8E95);
110+
/// Comment UUID base type.
111+
pub const COMMENT_BASE_TYPE: Uuid = Uuid::from_u128(0xB679_DED3_0E7C_41BA_89F8_DA62_A178_98EA);
112+
/// Decision UUID base type.
113+
pub const DECISION_BASE_TYPE: Uuid = Uuid::from_u128(0x788F_F4C6_D65A_451F_BB33_575F_E056_B411);
114+
/// Moderation Action UUID base type.
115+
pub const MODERATION_ACTION_BASE_TYPE: Uuid =
116+
Uuid::from_u128(0xA5D2_32B8_5E03_4117_9AFD_BE32_B878_FCDD);
117+
/// Proposal UUID base type.
118+
pub const PROPOSAL_BASE_TYPE: Uuid = Uuid::from_u128(0x7808_D2BA_D511_40AF_84E8_C0D1_625F_DFDC);
119+
/// Submission Action UUID base type.
120+
pub const SUBMISSION_ACTION_BASE_TYPE: Uuid =
46121
Uuid::from_u128(0x7892_7329_CFD9_4EA1_9C71_0E01_9B12_6A65);
47-
/// Proposal UUID type.
48-
pub const PROPOSAL_UUID_TYPE: Uuid = PROPOSAL_DOCUMENT_UUID_TYPE;
49-
/// Comment UUID type.
50-
pub const COMMENT_UUID_TYPE: Uuid = COMMENT_DOCUMENT_UUID_TYPE;
51-
/// Action UUID type.
52-
pub const ACTION_UUID_TYPE: Uuid = PROPOSAL_ACTION_DOCUMENT_UUID_TYPE;
122+
/// Template UUID base type.
123+
pub const TEMPLATE_BASE_TYPE: Uuid = Uuid::from_u128(0x0CE8_AB38_9258_4FBC_A62E_7FAA_6E58_318F);
53124

54125
/// Document type which will be deprecated.
55126
pub mod deprecated {

rust/signed_doc/src/metadata/doc_type.rs

Lines changed: 64 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,15 @@ use std::{
55
hash::{Hash, Hasher},
66
};
77

8-
use catalyst_types::uuid::{CborContext, Uuid, UuidV4};
8+
use catalyst_types::uuid::{CborContext, Uuid, UuidV4, UUID_CBOR_TAG};
9+
use coset::cbor::Value;
910
use minicbor::{Decode, Decoder, Encode};
1011
use serde::{Deserialize, Deserializer};
1112
use tracing::warn;
1213

1314
use crate::{
1415
decode_context::{CompatibilityPolicy, DecodeContext},
15-
doc_types::{
16-
ACTION_UUID_TYPE, COMMENT_UUID_TYPE, PROPOSAL_ACTION_DOC, PROPOSAL_COMMENT_DOC,
17-
PROPOSAL_DOC_TYPE, PROPOSAL_UUID_TYPE,
18-
},
16+
doc_types::{deprecated, PROPOSAL, PROPOSAL_COMMENT, PROPOSAL_SUBMISSION_ACTION},
1917
};
2018

2119
/// List of `UUIDv4` document type.
@@ -87,6 +85,18 @@ impl TryFrom<Vec<Uuid>> for DocType {
8785
}
8886
}
8987

88+
impl From<DocType> for Vec<Uuid> {
89+
fn from(value: DocType) -> Vec<Uuid> {
90+
value.0.into_iter().map(Uuid::from).collect()
91+
}
92+
}
93+
94+
impl From<DocType> for Vec<String> {
95+
fn from(val: DocType) -> Self {
96+
val.0.into_iter().map(|uuid| uuid.to_string()).collect()
97+
}
98+
}
99+
90100
impl TryFrom<Vec<UuidV4>> for DocType {
91101
type Error = DocTypeError;
92102

@@ -231,9 +241,11 @@ impl Decode<'_, DecodeContext<'_>> for DocType {
231241
/// <https://github.com/input-output-hk/catalyst-libs/blob/main/docs/src/architecture/08_concepts/signed_doc/types.md#document-types>
232242
fn map_doc_type(uuid: UuidV4) -> DocType {
233243
match uuid {
234-
id if Uuid::from(id) == PROPOSAL_UUID_TYPE => PROPOSAL_DOC_TYPE.clone(),
235-
id if Uuid::from(id) == COMMENT_UUID_TYPE => PROPOSAL_COMMENT_DOC.clone(),
236-
id if Uuid::from(id) == ACTION_UUID_TYPE => PROPOSAL_ACTION_DOC.clone(),
244+
id if Uuid::from(id) == deprecated::PROPOSAL_DOCUMENT_UUID_TYPE => PROPOSAL.clone(),
245+
id if Uuid::from(id) == deprecated::COMMENT_DOCUMENT_UUID_TYPE => PROPOSAL_COMMENT.clone(),
246+
id if Uuid::from(id) == deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE => {
247+
PROPOSAL_SUBMISSION_ACTION.clone()
248+
},
237249
id => DocType(vec![id]),
238250
}
239251
}
@@ -284,15 +296,35 @@ impl<'de> Deserialize<'de> for DocType {
284296
}
285297
}
286298

299+
impl From<DocType> for Value {
300+
fn from(value: DocType) -> Self {
301+
Value::Array(
302+
value
303+
.0
304+
.iter()
305+
.map(|uuidv4| {
306+
Value::Tag(
307+
UUID_CBOR_TAG,
308+
Box::new(Value::Bytes(uuidv4.uuid().as_bytes().to_vec())),
309+
)
310+
})
311+
.collect(),
312+
)
313+
}
314+
}
315+
287316
// This is needed to preserve backward compatibility with the old solution.
288317
impl PartialEq for DocType {
289318
fn eq(&self, other: &Self) -> bool {
290319
// List of special-case (single UUID) -> new DocType
291320
// The old one should equal to the new one
292321
let special_cases = [
293-
(PROPOSAL_UUID_TYPE, &*PROPOSAL_DOC_TYPE),
294-
(COMMENT_UUID_TYPE, &*PROPOSAL_COMMENT_DOC),
295-
(ACTION_UUID_TYPE, &*PROPOSAL_ACTION_DOC),
322+
(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE, &*PROPOSAL),
323+
(deprecated::COMMENT_DOCUMENT_UUID_TYPE, &*PROPOSAL_COMMENT),
324+
(
325+
deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
326+
&*PROPOSAL_SUBMISSION_ACTION,
327+
),
296328
];
297329
for (uuid, expected) in special_cases {
298330
match DocType::try_from(uuid) {
@@ -416,21 +448,33 @@ mod tests {
416448
assert!(matches!(result, Err(DocTypeError::StringConversion(s)) if s == "not-a-uuid"));
417449
}
418450

451+
#[test]
452+
fn test_doc_type_to_value() {
453+
let uuid = uuid::Uuid::new_v4();
454+
let doc_type: Value = DocType(vec![UuidV4::try_from(uuid).unwrap()]).into();
455+
456+
for d in &doc_type.into_array().unwrap() {
457+
let t = d.clone().into_tag().unwrap();
458+
assert_eq!(t.0, UUID_CBOR_TAG);
459+
assert_eq!(t.1.as_bytes().unwrap().len(), 16);
460+
}
461+
}
462+
419463
#[test]
420464
fn test_doctype_equal_special_cases() {
421465
// Direct equal
422-
let uuid: UuidV4 = PROPOSAL_UUID_TYPE.try_into().unwrap();
466+
let uuid = deprecated::PROPOSAL_DOCUMENT_UUID_TYPE;
423467
let dt1 = DocType::try_from(vec![uuid]).unwrap();
424468
let dt2 = DocType::try_from(vec![uuid]).unwrap();
425469
assert_eq!(dt1, dt2);
426470

427471
// single -> special mapped type
428-
let single = DocType::try_from(PROPOSAL_UUID_TYPE).unwrap();
429-
assert_eq!(single, *PROPOSAL_DOC_TYPE);
430-
let single = DocType::try_from(COMMENT_UUID_TYPE).unwrap();
431-
assert_eq!(single, *PROPOSAL_COMMENT_DOC);
432-
let single = DocType::try_from(ACTION_UUID_TYPE).unwrap();
433-
assert_eq!(single, *PROPOSAL_ACTION_DOC);
472+
let single = DocType::try_from(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
473+
assert_eq!(single, *PROPOSAL);
474+
let single = DocType::try_from(deprecated::COMMENT_DOCUMENT_UUID_TYPE).unwrap();
475+
assert_eq!(single, *PROPOSAL_COMMENT);
476+
let single = DocType::try_from(deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE).unwrap();
477+
assert_eq!(single, *PROPOSAL_SUBMISSION_ACTION);
434478
}
435479

436480
#[test]
@@ -459,10 +503,10 @@ mod tests {
459503

460504
#[test]
461505
fn test_deserialize_special_case() {
462-
let uuid = PROPOSAL_UUID_TYPE.to_string();
506+
let uuid = deprecated::PROPOSAL_DOCUMENT_UUID_TYPE.to_string();
463507
let json = json!(uuid);
464508
let dt: DocType = serde_json::from_value(json).unwrap();
465509

466-
assert_eq!(dt, *PROPOSAL_DOC_TYPE);
510+
assert_eq!(dt, *PROPOSAL);
467511
}
468512
}

0 commit comments

Comments
 (0)