1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use std::borrow::Borrow;
use std::collections::{BTreeMap, HashSet};
use std::hash::Hash;
use std::rc::Rc;
use serde::{Deserialize, Serialize, Serializer};
mod rcstr_serialize {
use serde::Deserializer;
use super::*;
pub(crate) fn serialize<S>(v: &Rc<str>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(&*v)
}
pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Rc<str>, D::Error>
where
D: Deserializer<'de>,
{
let v = String::deserialize(deserializer)?;
Ok(Rc::from(v.into_boxed_str()))
}
}
pub type ContentID = Rc<str>;
#[derive(Debug, Eq, Deserialize, Serialize)]
pub struct ObjectSourceMeta {
#[serde(with = "rcstr_serialize")]
pub identifier: ContentID,
#[serde(with = "rcstr_serialize")]
pub name: Rc<str>,
#[serde(with = "rcstr_serialize")]
pub srcid: Rc<str>,
pub change_time_offset: u32,
}
impl PartialEq for ObjectSourceMeta {
fn eq(&self, other: &Self) -> bool {
*self.identifier == *other.identifier
}
}
impl Hash for ObjectSourceMeta {
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
self.identifier.hash(state);
}
}
impl Borrow<str> for ObjectSourceMeta {
fn borrow(&self) -> &str {
&*self.identifier
}
}
pub type ObjectMetaSet = HashSet<ObjectSourceMeta>;
pub type ObjectMetaMap = BTreeMap<String, ContentID>;
#[derive(Debug, Default)]
pub struct ObjectMeta {
pub set: ObjectMetaSet,
pub map: ObjectMetaMap,
}