tc_server/
claim.rs

1use serde::de::{Deserialize, Deserializer};
2use serde::ser::{Serialize, Serializer};
3use umask::Mode;
4
5use tcgeneric::TCPathBuf;
6
7#[derive(Clone)]
8pub struct Claim {
9    path: TCPathBuf,
10    mode: Mode,
11}
12
13impl Claim {
14    pub fn new<Path: Into<TCPathBuf>>(path: Path, mode: Mode) -> Self {
15        Self {
16            path: path.into(),
17            mode,
18        }
19    }
20
21    pub fn mode(&self) -> Mode {
22        self.mode
23    }
24
25    pub fn path(&self) -> &TCPathBuf {
26        &self.path
27    }
28}
29
30impl<'de> Deserialize<'de> for Claim {
31    fn deserialize<D>(deserializer: D) -> Result<Claim, D::Error>
32    where
33        D: Deserializer<'de>,
34    {
35        <(TCPathBuf, u32) as Deserialize<'de>>::deserialize(deserializer).map(|(path, mode)| {
36            Claim {
37                path,
38                mode: mode.into(),
39            }
40        })
41    }
42}
43
44impl Serialize for Claim {
45    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
46    where
47        S: Serializer,
48    {
49        (&self.path, u32::from(self.mode)).serialize(serializer)
50    }
51}