tetratto_core/model/
stacks.rs1use serde::{Serialize, Deserialize};
2use tetratto_shared::{snow::Snowflake, unix_epoch_timestamp};
3
4#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
5pub enum StackPrivacy {
6 Public,
8 Private,
10}
11
12impl Default for StackPrivacy {
13 fn default() -> Self {
14 Self::Private
15 }
16}
17
18#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
19pub enum StackMode {
20 Include,
23 Exclude,
26 BlockList,
31 Circle,
33}
34
35impl Default for StackMode {
36 fn default() -> Self {
37 Self::Include
38 }
39}
40
41#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
42pub enum StackSort {
43 Created,
44 Likes,
45}
46
47impl Default for StackSort {
48 fn default() -> Self {
49 Self::Created
50 }
51}
52
53#[derive(Clone, Debug, Serialize, Deserialize)]
54pub struct UserStack {
55 pub id: usize,
56 pub created: usize,
57 pub owner: usize,
58 pub name: String,
59 pub users: Vec<usize>,
60 pub privacy: StackPrivacy,
61 pub mode: StackMode,
62 pub sort: StackSort,
63}
64
65impl UserStack {
66 pub fn new(name: String, owner: usize, users: Vec<usize>) -> Self {
68 Self {
69 id: Snowflake::new().to_string().parse::<usize>().unwrap(),
70 created: unix_epoch_timestamp(),
71 owner,
72 name,
73 users,
74 privacy: StackPrivacy::default(),
75 mode: StackMode::default(),
76 sort: StackSort::default(),
77 }
78 }
79}
80
81#[derive(Clone, Debug, Serialize, Deserialize)]
82pub struct StackBlock {
83 pub id: usize,
84 pub created: usize,
85 pub initiator: usize,
86 pub stack: usize,
87}
88
89impl StackBlock {
90 pub fn new(initiator: usize, stack: usize) -> Self {
92 Self {
93 id: Snowflake::new().to_string().parse::<usize>().unwrap(),
94 created: unix_epoch_timestamp(),
95 initiator,
96 stack,
97 }
98 }
99}