cyfs_lib/rmeta/def/
object.rs1use crate::*;
2use cyfs_base::*;
3
4use once_cell::sync::OnceCell;
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct GlobalStateObjectMetaItem {
9 pub selector: String,
11
12 pub access: GlobalStatePathGroupAccess,
14
15 pub depth: Option<u8>,
17}
18
19impl std::fmt::Display for GlobalStateObjectMetaItem {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 write!(f, "({}, {}, {:?})", self.selector, self.access, self.depth)
22 }
23}
24
25pub struct GlobalStateObjectMetaConfigItemValue {
26 pub access: GlobalStatePathGroupAccess,
28
29 pub depth: Option<u8>,
31}
32
33pub trait ObjectSelectorDataProvider: Send + Sync {
34 fn object_id(&self) -> &ObjectId;
35 fn obj_type(&self) -> u16;
36
37 fn object_dec_id(&self) -> &Option<ObjectId>;
38 fn object_author(&self) -> &Option<ObjectId>;
39 fn object_owner(&self) -> &Option<ObjectId>;
40
41 fn object_create_time(&self) -> Option<u64>;
42 fn object_update_time(&self) -> Option<u64>;
43 fn object_expired_time(&self) -> Option<u64>;
44
45 fn update_time(&self) -> &u64;
46 fn insert_time(&self) -> &u64;
47}
48
49pub struct ObjectSelectorTokenList;
50
51impl ObjectSelectorTokenList {
52 fn gen_token_list() -> ExpReservedTokenList {
53 let mut token_list = ExpReservedTokenList::new();
54
55 token_list.add_u16("obj_type_code");
57 token_list.add_string("obj_category");
58 token_list.add_u16("obj_type");
59
60 token_list.add_string("object.dec_id");
61 token_list.add_string("object.author");
62 token_list.add_string("object.owner");
63
64 token_list.add_u64("object.create_time");
65 token_list.add_u64("object.update_time");
66 token_list.add_u64("object.expired_time");
67
68 token_list.add_u64("insert_time");
69 token_list.add_u64("update_time");
70
71 token_list
72 }
73
74 pub fn token_list() -> &'static ExpReservedTokenList {
75 static S_INSTANCE: OnceCell<ExpReservedTokenList> = OnceCell::new();
76 S_INSTANCE.get_or_init(|| Self::gen_token_list())
77 }
78}
79
80impl ExpReservedTokenTranslator for &dyn ObjectSelectorDataProvider
81{
82 fn trans(&self, token: &str) -> ExpTokenEvalValue {
83 match token {
84 "obj_type_code" => ExpTokenEvalValue::U16(self.object_id().obj_type_code().into()),
85 "obj_category" => ExpTokenEvalValue::from_string(&self.object_id().object_category()),
86 "obj_type" => ExpTokenEvalValue::U16(self.obj_type()),
87
88 "object.dec_id" => ExpTokenEvalValue::from_opt_string(&self.object_dec_id()),
89 "object.author" => ExpTokenEvalValue::from_opt_string(&self.object_author()),
90 "object.owner" => ExpTokenEvalValue::from_opt_string(&self.object_owner()),
91
92 "object.create_time" => ExpTokenEvalValue::from_opt_u64(self.object_create_time()),
93 "object.update_time" => ExpTokenEvalValue::from_opt_u64(self.object_update_time()),
94 "object.expired_time" => ExpTokenEvalValue::from_opt_u64(self.object_expired_time()),
95
96 "insert_time" => ExpTokenEvalValue::U64(*self.insert_time()),
97 "update_time" => ExpTokenEvalValue::U64(*self.update_time()),
98
99 _ => {
100 unreachable!("unknown object selector token! {}", token);
101 }
102 }
103 }
104}
105