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}