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