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)]
5#[derive(Default)]
6pub enum StackPrivacy {
7 Public,
9 #[default]
11 Private,
12}
13
14
15#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
16#[derive(Default)]
17pub enum StackMode {
18 #[default]
21 Include,
22 Exclude,
25 BlockList,
30 Circle,
32}
33
34
35#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
36#[derive(Default)]
37pub enum StackSort {
38 #[default]
39 Created,
40 Likes,
41}
42
43
44#[derive(Clone, Debug, Serialize, Deserialize)]
45pub struct UserStack {
46 pub id: usize,
47 pub created: usize,
48 pub owner: usize,
49 pub name: String,
50 pub users: Vec<usize>,
51 pub privacy: StackPrivacy,
52 pub mode: StackMode,
53 pub sort: StackSort,
54 pub is_locked: bool,
57}
58
59impl UserStack {
60 pub fn new(name: String, owner: usize, users: Vec<usize>) -> Self {
62 Self {
63 id: Snowflake::new().to_string().parse::<usize>().unwrap(),
64 created: unix_epoch_timestamp(),
65 owner,
66 name,
67 users,
68 privacy: StackPrivacy::default(),
69 mode: StackMode::default(),
70 sort: StackSort::default(),
71 is_locked: false,
72 }
73 }
74}
75
76#[derive(Clone, Debug, Serialize, Deserialize)]
77pub struct StackBlock {
78 pub id: usize,
79 pub created: usize,
80 pub initiator: usize,
81 pub stack: usize,
82}
83
84impl StackBlock {
85 pub fn new(initiator: usize, stack: usize) -> Self {
87 Self {
88 id: Snowflake::new().to_string().parse::<usize>().unwrap(),
89 created: unix_epoch_timestamp(),
90 initiator,
91 stack,
92 }
93 }
94}