roughly_rs/
missing_hours_data.rs

1use serde::{Deserialize, Serialize};
2
3/// A slimmed‐down version of `Employee` containing only the requested fields.
4#[derive(Debug, Serialize, Deserialize)]
5pub struct SimpleEmployee {
6    #[serde(rename = "employeeId")]
7    pub employee_id: String,
8
9    #[serde(rename = "employmentRate")]
10    pub employment_rate: i32,
11
12    #[serde(rename = "employeeName")]
13    pub employee_name: String,
14
15    #[serde(rename = "hoursSumUntilToday")]
16    pub hours_sum_until_today: f64,
17
18    #[serde(rename = "untilTodayExpected")]
19    pub until_today_expected: f64,
20}
21
22/// These types are assumed to exist based on your previous JSON‐parsing setup:
23#[derive(Debug, Serialize, Deserialize)]
24pub struct Entry {
25    pub result: ResultWrapper,
26}
27
28#[derive(Debug, Serialize, Deserialize)]
29pub struct ResultWrapper {
30    pub data: Option<Data>,
31}
32
33#[derive(Debug, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum Data {
36    Employees(Vec<Employee>),
37    Companies { companies: Vec<serde_json::Value> },
38    FortnoxStatus {
39        #[serde(rename = "fortnoxTokenIsExpired")]
40        fortnox_token_is_expired: bool,
41        #[serde(rename = "fortnoxVouchersIsSyncing")]
42        fortnox_vouchers_is_syncing: bool,
43    },
44    // `None` covers `"data": null`
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48pub struct Employee {
49    #[serde(rename = "employeeId")]
50    pub employee_id: String,
51
52    #[serde(rename = "employeeName")]
53    pub employee_name: String,
54
55    #[serde(rename = "employeeColor")]
56    pub employee_color: String,
57
58    #[serde(rename = "employeeImage")]
59    pub employee_image: String,
60
61    #[serde(rename = "employeeTotalHours")]
62    pub employee_total_hours: f64,
63
64    #[serde(rename = "hoursSumUntilToday")]
65    pub hours_sum_until_today: f64,
66
67    pub rows: Vec<Row>,
68
69    #[serde(rename = "employeeActivityTotals")]
70    pub employee_activity_totals: Vec<ActivityTotal>,
71
72    #[serde(rename = "timeReportingDone")]
73    pub time_reporting_done: bool,
74
75    #[serde(rename = "expectedHours")]
76    pub expected_hours: f64,
77
78    #[serde(rename = "untilTodayExpected")]
79    pub until_today_expected: f64,
80}
81
82#[derive(Debug, Serialize, Deserialize)]
83pub struct Row {
84    pub date: String,
85
86    #[serde(rename = "activityName")]
87    pub activity_name: String,
88
89    pub hours: f64,
90}
91
92#[derive(Debug, Serialize, Deserialize)]
93pub struct ActivityTotal {
94    #[serde(rename = "activityName")]
95    pub activity_name: String,
96
97    pub hours: f64,
98}
99