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
pub mod blog;
pub mod core;
pub mod story;
pub mod wiki;
use {
crate::utils::nanoid,
arrayvec::ArrayString,
chrono::{DateTime, Utc},
std::ops::Deref,
};
crate::newtype! {
#[derive(serde::Deserialize, serde::Serialize)]
Id: ArrayString<[u8; nanoid::SIZE]>
}
#[rustfmt::skip]
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[derive(serde::Deserialize, serde::Serialize)]
pub struct New<T> {
inner: T,
}
impl<T> Deref for New<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
#[rustfmt::skip]
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[derive(serde::Deserialize, serde::Serialize)]
pub struct Existing<T> {
pub id: Id,
inner: T,
pub created: DateTime<Utc>,
pub updated: DateTime<Utc>,
}
impl<T> Deref for Existing<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.inner
}
}