1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct Category {
16 #[serde(rename = "id")]
17 pub id: uuid::Uuid,
18 #[serde(rename = "category_group_id")]
19 pub category_group_id: uuid::Uuid,
20 #[serde(rename = "category_group_name", skip_serializing_if = "Option::is_none")]
21 pub category_group_name: Option<String>,
22 #[serde(rename = "name")]
23 pub name: String,
24 #[serde(rename = "hidden")]
26 pub hidden: bool,
27 #[serde(rename = "original_category_group_id", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
29 pub original_category_group_id: Option<Option<uuid::Uuid>>,
30 #[serde(rename = "note", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
31 pub note: Option<Option<String>>,
32 #[serde(rename = "budgeted")]
34 pub budgeted: i64,
35 #[serde(rename = "activity")]
37 pub activity: i64,
38 #[serde(rename = "balance")]
40 pub balance: i64,
41 #[serde(rename = "goal_type", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
43 pub goal_type: Option<Option<GoalType>>,
44 #[serde(rename = "goal_needs_whole_amount", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
46 pub goal_needs_whole_amount: Option<Option<bool>>,
47 #[serde(rename = "goal_day", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
49 pub goal_day: Option<Option<i32>>,
50 #[serde(rename = "goal_cadence", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
52 pub goal_cadence: Option<Option<i32>>,
53 #[serde(rename = "goal_cadence_frequency", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
55 pub goal_cadence_frequency: Option<Option<i32>>,
56 #[serde(rename = "goal_creation_month", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
58 pub goal_creation_month: Option<Option<String>>,
59 #[serde(rename = "goal_target", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
61 pub goal_target: Option<Option<i64>>,
62 #[serde(rename = "goal_target_month", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
64 pub goal_target_month: Option<Option<String>>,
65 #[serde(rename = "goal_percentage_complete", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
67 pub goal_percentage_complete: Option<Option<i32>>,
68 #[serde(rename = "goal_months_to_budget", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
70 pub goal_months_to_budget: Option<Option<i32>>,
71 #[serde(rename = "goal_under_funded", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
73 pub goal_under_funded: Option<Option<i64>>,
74 #[serde(rename = "goal_overall_funded", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
76 pub goal_overall_funded: Option<Option<i64>>,
77 #[serde(rename = "goal_overall_left", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
79 pub goal_overall_left: Option<Option<i64>>,
80 #[serde(rename = "deleted")]
82 pub deleted: bool,
83}
84
85impl Category {
86 pub fn new(id: uuid::Uuid, category_group_id: uuid::Uuid, name: String, hidden: bool, budgeted: i64, activity: i64, balance: i64, deleted: bool) -> Category {
87 Category {
88 id,
89 category_group_id,
90 category_group_name: None,
91 name,
92 hidden,
93 original_category_group_id: None,
94 note: None,
95 budgeted,
96 activity,
97 balance,
98 goal_type: None,
99 goal_needs_whole_amount: None,
100 goal_day: None,
101 goal_cadence: None,
102 goal_cadence_frequency: None,
103 goal_creation_month: None,
104 goal_target: None,
105 goal_target_month: None,
106 goal_percentage_complete: None,
107 goal_months_to_budget: None,
108 goal_under_funded: None,
109 goal_overall_funded: None,
110 goal_overall_left: None,
111 deleted,
112 }
113 }
114}
115#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
117pub enum GoalType {
118 #[serde(rename = "TB")]
119 Tb,
120 #[serde(rename = "TBD")]
121 Tbd,
122 #[serde(rename = "MF")]
123 Mf,
124 #[serde(rename = "NEED")]
125 Need,
126 #[serde(rename = "DEBT")]
127 Debt,
128}
129
130impl Default for GoalType {
131 fn default() -> GoalType {
132 Self::Tb
133 }
134}
135