Skip to content

Commit 54924f8

Browse files
committed
fix(signed-doc): improve static doc types
Signed-off-by: bkioshn <[email protected]>
1 parent 39fc165 commit 54924f8

File tree

7 files changed

+95
-78
lines changed

7 files changed

+95
-78
lines changed

rust/signed_doc/src/doc_types/mod.rs

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,56 +4,63 @@
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

11-
use crate::{doc_types::deprecated::PROPOSAL_TEMPLATE_UUID_TYPE, DocType};
8+
use crate::DocType;
129

1310
/// Proposal document type.
1411
#[allow(clippy::expect_used)]
15-
pub static PROPOSAL_DOC_TYPE: LazyLock<DocType> = LazyLock::new(|| {
16-
let ids = &[PROPOSAL_UUID_TYPE];
12+
pub static PROPOSAL: LazyLock<DocType> = LazyLock::new(|| {
13+
let ids = &[PROPOSAL_BASE_TYPE];
1714
ids.to_vec()
1815
.try_into()
1916
.expect("Failed to convert proposal document Uuid to DocType")
2017
});
2118

2219
/// Proposal comment document type.
2320
#[allow(clippy::expect_used)]
24-
pub static PROPOSAL_COMMENT_DOC: LazyLock<DocType> = LazyLock::new(|| {
25-
let ids = &[COMMENT_UUID_TYPE, PROPOSAL_UUID_TYPE];
21+
pub static PROPOSAL_COMMENT: LazyLock<DocType> = LazyLock::new(|| {
22+
let ids = &[COMMENT_BASE_TYPE, PROPOSAL_BASE_TYPE];
2623
ids.to_vec()
2724
.try_into()
2825
.expect("Failed to convert proposal comment document Uuid to DocType")
2926
});
3027

3128
/// Proposal action document type.
3229
#[allow(clippy::expect_used)]
33-
pub static PROPOSAL_ACTION_DOC: LazyLock<DocType> = LazyLock::new(|| {
30+
pub static PROPOSAL_SUBMISSION_ACTION: LazyLock<DocType> = LazyLock::new(|| {
3431
let ids = &[
35-
ACTION_UUID_TYPE,
36-
PROPOSAL_UUID_TYPE,
37-
SUBMISSION_ACTION_UUID_TYPE,
32+
ACTION_BASE_TYPE,
33+
PROPOSAL_BASE_TYPE,
34+
SUBMISSION_ACTION_BASE_TYPE,
3835
];
3936
ids.to_vec()
4037
.try_into()
4138
.expect("Failed to convert proposal action document Uuid to DocType")
4239
});
4340

44-
/// Submission Action UUID type.
45-
pub const SUBMISSION_ACTION_UUID_TYPE: Uuid =
41+
/// -------------- Base Types --------------
42+
/// Action UUID base type.
43+
pub const ACTION_BASE_TYPE: Uuid = Uuid::from_u128(0x5E60_E623_AD02_4A1B_A1AC_406D_B978_EE48);
44+
/// Brand UUID base type.
45+
pub const BRAND_BASE_TYPE: Uuid = Uuid::from_u128(0xEBCA_BEEB_5BC5_4F95_91E8_CAB8_CA72_4172);
46+
/// Campaign UUID base type.
47+
pub const CAMPAIGN_BASE_TYPE: Uuid = Uuid::from_u128(0x5EF3_2D5D_F240_462C_A7A4_BA4A_F221_FA23);
48+
/// Category UUID base type.
49+
pub const CATEGORY_BASE_TYPE: Uuid = Uuid::from_u128(0x8189_38C3_3139_4DAA_AFE6_974C_7848_8E95);
50+
/// Comment UUID base type.
51+
pub const COMMENT_BASE_TYPE: Uuid = Uuid::from_u128(0xB679_DED3_0E7C_41BA_89F8_DA62_A178_98EA);
52+
/// Decision UUID base type.
53+
pub const DECISION_BASE_TYPE: Uuid = Uuid::from_u128(0x788F_F4C6_D65A_451F_BB33_575F_E056_B411);
54+
/// Moderation Action UUID base type.
55+
pub const MODERATION_ACTION_BASE_TYPE: Uuid =
56+
Uuid::from_u128(0xA5D2_32B8_5E03_4117_9AFD_BE32_B878_FCDD);
57+
/// Proposal UUID base type.
58+
pub const PROPOSAL_BASE_TYPE: Uuid = Uuid::from_u128(0x7808_D2BA_D511_40AF_84E8_C0D1_625F_DFDC);
59+
/// Submission Action UUID base type.
60+
pub const SUBMISSION_ACTION_BASE_TYPE: Uuid =
4661
Uuid::from_u128(0x7892_7329_CFD9_4EA1_9C71_0E01_9B12_6A65);
47-
/// Category UUID type.
48-
pub const CATEGORY_UUID_TYPE: Uuid = Uuid::from_u128(0x818938C3_3139_4DAA_AFE6_974C78488E95);
49-
/// Proposal UUID type.
50-
pub const PROPOSAL_UUID_TYPE: Uuid = PROPOSAL_DOCUMENT_UUID_TYPE;
51-
/// Comment UUID type.
52-
pub const COMMENT_UUID_TYPE: Uuid = COMMENT_DOCUMENT_UUID_TYPE;
53-
/// Action UUID type.
54-
pub const ACTION_UUID_TYPE: Uuid = PROPOSAL_ACTION_DOCUMENT_UUID_TYPE;
55-
/// Template UUID type.
56-
pub const TEMPLATE_UUID_TYPE: Uuid = PROPOSAL_TEMPLATE_UUID_TYPE;
62+
/// Template UUID base type.
63+
pub const TEMPLATE_BASE_TYPE: Uuid = Uuid::from_u128(0x0CE8_AB38_9258_4FBC_A62E_7FAA_6E58_318F);
5764

5865
/// Document type which will be deprecated.
5966
pub mod deprecated {

rust/signed_doc/src/metadata/doc_type.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ use tracing::warn;
1616

1717
use crate::{
1818
decode_context::{CompatibilityPolicy, DecodeContext},
19-
doc_types::{
20-
ACTION_UUID_TYPE, COMMENT_UUID_TYPE, PROPOSAL_ACTION_DOC, PROPOSAL_COMMENT_DOC,
21-
PROPOSAL_DOC_TYPE, PROPOSAL_UUID_TYPE,
22-
},
19+
doc_types::{deprecated, PROPOSAL, PROPOSAL_COMMENT, PROPOSAL_SUBMISSION_ACTION},
2320
};
2421

2522
/// List of `UUIDv4` document type.
@@ -252,9 +249,11 @@ impl Decode<'_, DecodeContext<'_>> for DocType {
252249
/// <https://github.com/input-output-hk/catalyst-libs/blob/main/docs/src/architecture/08_concepts/signed_doc/types.md#document-types>
253250
fn map_doc_type(uuid: Uuid) -> anyhow::Result<DocType> {
254251
match uuid {
255-
id if id == PROPOSAL_UUID_TYPE => Ok(PROPOSAL_DOC_TYPE.clone()),
256-
id if id == COMMENT_UUID_TYPE => Ok(PROPOSAL_COMMENT_DOC.clone()),
257-
id if id == ACTION_UUID_TYPE => Ok(PROPOSAL_ACTION_DOC.clone()),
252+
id if id == deprecated::PROPOSAL_DOCUMENT_UUID_TYPE => Ok(PROPOSAL.clone()),
253+
id if id == deprecated::COMMENT_DOCUMENT_UUID_TYPE => Ok(PROPOSAL_COMMENT.clone()),
254+
id if id == deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE => {
255+
Ok(PROPOSAL_SUBMISSION_ACTION.clone())
256+
},
258257
_ => anyhow::bail!("Unknown document type: {uuid}"),
259258
}
260259
}
@@ -337,9 +336,12 @@ impl PartialEq for DocType {
337336
// List of special-case (single UUID) -> new DocType
338337
// The old one should equal to the new one
339338
let special_cases = [
340-
(PROPOSAL_UUID_TYPE, &*PROPOSAL_DOC_TYPE),
341-
(COMMENT_UUID_TYPE, &*PROPOSAL_COMMENT_DOC),
342-
(ACTION_UUID_TYPE, &*PROPOSAL_ACTION_DOC),
339+
(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE, &*PROPOSAL),
340+
(deprecated::COMMENT_DOCUMENT_UUID_TYPE, &*PROPOSAL_COMMENT),
341+
(
342+
deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
343+
&*PROPOSAL_SUBMISSION_ACTION,
344+
),
343345
];
344346
for (uuid, expected) in special_cases {
345347
match DocType::try_from(uuid) {
@@ -478,18 +480,18 @@ mod tests {
478480
#[test]
479481
fn test_doctype_equal_special_cases() {
480482
// Direct equal
481-
let uuid = PROPOSAL_UUID_TYPE;
483+
let uuid = deprecated::PROPOSAL_DOCUMENT_UUID_TYPE;
482484
let dt1 = DocType::try_from(vec![uuid]).unwrap();
483485
let dt2 = DocType::try_from(vec![uuid]).unwrap();
484486
assert_eq!(dt1, dt2);
485487

486488
// single -> special mapped type
487-
let single = DocType::try_from(PROPOSAL_UUID_TYPE).unwrap();
488-
assert_eq!(single, *PROPOSAL_DOC_TYPE);
489-
let single = DocType::try_from(COMMENT_UUID_TYPE).unwrap();
490-
assert_eq!(single, *PROPOSAL_COMMENT_DOC);
491-
let single = DocType::try_from(ACTION_UUID_TYPE).unwrap();
492-
assert_eq!(single, *PROPOSAL_ACTION_DOC);
489+
let single = DocType::try_from(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
490+
assert_eq!(single, *PROPOSAL);
491+
let single = DocType::try_from(deprecated::COMMENT_DOCUMENT_UUID_TYPE).unwrap();
492+
assert_eq!(single, *PROPOSAL_COMMENT);
493+
let single = DocType::try_from(deprecated::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE).unwrap();
494+
assert_eq!(single, *PROPOSAL_SUBMISSION_ACTION);
493495
}
494496

495497
#[test]
@@ -518,10 +520,10 @@ mod tests {
518520

519521
#[test]
520522
fn test_deserialize_special_case() {
521-
let uuid = PROPOSAL_UUID_TYPE.to_string();
523+
let uuid = deprecated::PROPOSAL_DOCUMENT_UUID_TYPE.to_string();
522524
let json = json!(uuid);
523525
let dt: DocType = serde_json::from_value(json).unwrap();
524526

525-
assert_eq!(dt, *PROPOSAL_DOC_TYPE);
527+
assert_eq!(dt, *PROPOSAL);
526528
}
527529
}

rust/signed_doc/src/validator/mod.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use rules::{
2323
use crate::{
2424
doc_types::{
2525
deprecated::{self},
26-
PROPOSAL_ACTION_DOC, PROPOSAL_COMMENT_DOC, PROPOSAL_DOC_TYPE,
26+
PROPOSAL, PROPOSAL_COMMENT, PROPOSAL_SUBMISSION_ACTION,
2727
},
2828
metadata::DocType,
2929
providers::{CatalystSignedDocumentProvider, VerifyingKeyProvider},
@@ -136,9 +136,12 @@ fn document_rules_init() -> HashMap<DocType, Arc<Rules>> {
136136
let comment_rules = Arc::new(comment_document_rules);
137137
let action_rules = Arc::new(proposal_submission_action_rules);
138138

139-
document_rules_map.insert(PROPOSAL_DOC_TYPE.clone(), Arc::clone(&proposal_rules));
140-
document_rules_map.insert(PROPOSAL_COMMENT_DOC.clone(), Arc::clone(&comment_rules));
141-
document_rules_map.insert(PROPOSAL_ACTION_DOC.clone(), Arc::clone(&action_rules));
139+
document_rules_map.insert(PROPOSAL.clone(), Arc::clone(&proposal_rules));
140+
document_rules_map.insert(PROPOSAL_COMMENT.clone(), Arc::clone(&comment_rules));
141+
document_rules_map.insert(
142+
PROPOSAL_SUBMISSION_ACTION.clone(),
143+
Arc::clone(&action_rules),
144+
);
142145

143146
// Insert old rules (for backward compatibility)
144147
document_rules_map.insert(

rust/signed_doc/tests/comment.rs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
//! Integration test for comment document validation part.
22
3-
use catalyst_signed_doc::{providers::tests::TestCatalystSignedDocumentProvider, *};
3+
use catalyst_signed_doc::{
4+
doc_types::deprecated, providers::tests::TestCatalystSignedDocumentProvider, *,
5+
};
46
use catalyst_types::catalyst_id::role_index::RoleId;
57

68
mod common;
79

810
#[tokio::test]
911
async fn test_valid_comment_doc() {
1012
let (proposal_doc, proposal_doc_id, proposal_doc_ver) =
11-
common::create_dummy_doc(doc_types::PROPOSAL_UUID_TYPE).unwrap();
13+
common::create_dummy_doc(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
1214
let (template_doc, template_doc_id, template_doc_ver) =
13-
common::create_dummy_doc(doc_types::deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
15+
common::create_dummy_doc(deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
1416

1517
let uuid_v7 = UuidV7::new();
1618
let (doc, ..) = common::create_dummy_signed_doc(
1719
serde_json::json!({
1820
"content-type": ContentType::Json.to_string(),
1921
"content-encoding": ContentEncoding::Brotli.to_string(),
20-
"type": doc_types::PROPOSAL_COMMENT_DOC.clone(),
22+
"type": doc_types::PROPOSAL_COMMENT.clone(),
2123
"id": uuid_v7.to_string(),
2224
"ver": uuid_v7.to_string(),
2325
"template": {
@@ -46,17 +48,17 @@ async fn test_valid_comment_doc() {
4648
#[tokio::test]
4749
async fn test_valid_comment_doc_old_type() {
4850
let (proposal_doc, proposal_doc_id, proposal_doc_ver) =
49-
common::create_dummy_doc(doc_types::PROPOSAL_UUID_TYPE).unwrap();
51+
common::create_dummy_doc(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
5052
let (template_doc, template_doc_id, template_doc_ver) =
51-
common::create_dummy_doc(doc_types::deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
53+
common::create_dummy_doc(deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
5254

5355
let uuid_v7 = UuidV7::new();
5456
let (doc, ..) = common::create_dummy_signed_doc(
5557
serde_json::json!({
5658
"content-type": ContentType::Json.to_string(),
5759
"content-encoding": ContentEncoding::Brotli.to_string(),
5860
// Using old (single uuid)
59-
"type": doc_types::deprecated::COMMENT_DOCUMENT_UUID_TYPE,
61+
"type": deprecated::COMMENT_DOCUMENT_UUID_TYPE,
6062
"id": uuid_v7.to_string(),
6163
"ver": uuid_v7.to_string(),
6264
"template": {
@@ -87,17 +89,17 @@ async fn test_valid_comment_doc_with_reply() {
8789
let empty_json = serde_json::to_vec(&serde_json::json!({})).unwrap();
8890

8991
let (proposal_doc, proposal_doc_id, proposal_doc_ver) =
90-
common::create_dummy_doc(doc_types::PROPOSAL_UUID_TYPE).unwrap();
92+
common::create_dummy_doc(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
9193
let (template_doc, template_doc_id, template_doc_ver) =
92-
common::create_dummy_doc(doc_types::deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
94+
common::create_dummy_doc(deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
9395

9496
let comment_doc_id = UuidV7::new();
9597
let comment_doc_ver = UuidV7::new();
9698
let comment_doc = Builder::new()
9799
.with_json_metadata(serde_json::json!({
98100
"id": comment_doc_id,
99101
"ver": comment_doc_ver,
100-
"type": doc_types::PROPOSAL_COMMENT_DOC.clone(),
102+
"type": doc_types::PROPOSAL_COMMENT.clone(),
101103
"content-type": ContentType::Json.to_string(),
102104
"template": { "id": template_doc_id.to_string(), "ver": template_doc_ver.to_string() },
103105
"ref": {
@@ -114,7 +116,7 @@ async fn test_valid_comment_doc_with_reply() {
114116
serde_json::json!({
115117
"content-type": ContentType::Json.to_string(),
116118
"content-encoding": ContentEncoding::Brotli.to_string(),
117-
"type": doc_types::PROPOSAL_COMMENT_DOC.clone(),
119+
"type": doc_types::PROPOSAL_COMMENT.clone(),
118120
"id": uuid_v7.to_string(),
119121
"ver": uuid_v7.to_string(),
120122
"template": {
@@ -147,16 +149,17 @@ async fn test_valid_comment_doc_with_reply() {
147149

148150
#[tokio::test]
149151
async fn test_invalid_comment_doc() {
150-
let (proposal_doc, ..) = common::create_dummy_doc(doc_types::PROPOSAL_UUID_TYPE).unwrap();
152+
let (proposal_doc, ..) =
153+
common::create_dummy_doc(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
151154
let (template_doc, template_doc_id, template_doc_ver) =
152-
common::create_dummy_doc(doc_types::deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
155+
common::create_dummy_doc(deprecated::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
153156

154157
let uuid_v7 = UuidV7::new();
155158
let (doc, ..) = common::create_dummy_signed_doc(
156159
serde_json::json!({
157160
"content-type": ContentType::Json.to_string(),
158161
"content-encoding": ContentEncoding::Brotli.to_string(),
159-
"type": doc_types::PROPOSAL_COMMENT_DOC.clone(),
162+
"type": doc_types::PROPOSAL_COMMENT.clone(),
160163
"id": uuid_v7.to_string(),
161164
"ver": uuid_v7.to_string(),
162165
"template": {

rust/signed_doc/tests/decoding.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Integration test for COSE decoding part.
22
3-
use catalyst_signed_doc::{providers::tests::TestVerifyingKeyProvider, *};
3+
use catalyst_signed_doc::{doc_types::deprecated, providers::tests::TestVerifyingKeyProvider, *};
44
use catalyst_types::catalyst_id::role_index::RoleId;
55
use common::create_dummy_key_pair;
66
use coset::TaggedCborSerializable;
@@ -12,7 +12,7 @@ mod common;
1212
fn catalyst_signed_doc_cbor_roundtrip_kid_as_id_test() {
1313
catalyst_signed_doc_cbor_roundtrip_kid_as_id(common::test_metadata());
1414
catalyst_signed_doc_cbor_roundtrip_kid_as_id(common::test_metadata_specific_type(
15-
Some(doc_types::PROPOSAL_UUID_TYPE.try_into().unwrap()),
15+
Some(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE.try_into().unwrap()),
1616
None,
1717
));
1818
}
@@ -41,7 +41,7 @@ fn catalyst_signed_doc_cbor_roundtrip_kid_as_id(data: (UuidV7, UuidV4, serde_jso
4141
async fn catalyst_signed_doc_parameters_aliases_test() {
4242
catalyst_signed_doc_parameters_aliases(common::test_metadata()).await;
4343
catalyst_signed_doc_parameters_aliases(common::test_metadata_specific_type(
44-
Some(doc_types::PROPOSAL_UUID_TYPE.try_into().unwrap()),
44+
Some(deprecated::PROPOSAL_DOCUMENT_UUID_TYPE.try_into().unwrap()),
4545
None,
4646
))
4747
.await;

rust/signed_doc/tests/proposal.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ async fn test_valid_proposal_doc() {
1515
serde_json::json!({
1616
"content-type": ContentType::Json.to_string(),
1717
"content-encoding": ContentEncoding::Brotli.to_string(),
18-
"type": doc_types::PROPOSAL_DOC_TYPE.clone(),
18+
"type": doc_types::PROPOSAL.clone(),
1919
"id": uuid_v7.to_string(),
2020
"ver": uuid_v7.to_string(),
2121
"template": {
@@ -79,7 +79,7 @@ async fn test_valid_proposal_doc_with_empty_provider() {
7979
serde_json::json!({
8080
"content-type": ContentType::Json.to_string(),
8181
"content-encoding": ContentEncoding::Brotli.to_string(),
82-
"type": doc_types::PROPOSAL_DOC_TYPE.clone(),
82+
"type": doc_types::PROPOSAL.clone(),
8383
"id": uuid_v7.to_string(),
8484
"ver": uuid_v7.to_string(),
8585
"template": {
@@ -106,7 +106,7 @@ async fn test_invalid_proposal_doc() {
106106
serde_json::json!({
107107
"content-type": ContentType::Json.to_string(),
108108
"content-encoding": ContentEncoding::Brotli.to_string(),
109-
"type": doc_types::PROPOSAL_DOC_TYPE.clone(),
109+
"type": doc_types::PROPOSAL.clone(),
110110
"id": uuid_v7.to_string(),
111111
"ver": uuid_v7.to_string(),
112112
// without specifying template id

0 commit comments

Comments
 (0)