gitlab_time_report/fetch_api/
api_model.rs1use crate::model::TimeLog;
4use chrono::Duration;
5use serde::Deserialize;
6use serde_with::{DurationSeconds, serde_as};
7
8#[derive(Debug, Deserialize)]
10pub(super) struct Project {
11 pub(super) name: String,
13 pub(super) timelogs: TimeLogs,
15}
16
17#[serde_as]
19#[derive(Debug, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct TimeLogs {
22 pub(super) nodes: Vec<TimeLog>,
24 pub(super) page_info: PageInfo,
26 #[serde_as(as = "DurationSeconds<String>")]
28 pub(super) total_spent_time: Duration,
29}
30
31#[derive(Debug, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub(super) struct PageInfo {
35 pub(super) has_next_page: bool,
37 pub(super) end_cursor: Option<String>,
39}
40
41#[derive(Debug, Deserialize)]
43pub(super) struct ApiResponse {
44 pub(super) data: Data,
46 pub(super) errors: Option<GraphQlErrors>,
48}
49
50#[derive(Debug, Deserialize)]
52pub(super) struct Data {
53 pub(super) project: Option<Project>,
55}
56
57#[derive(Debug, Deserialize)]
59pub(super) struct GraphQlErrors {
60 pub(super) errors: Vec<GraphQlError>,
61}
62
63#[derive(Debug, Deserialize)]
65pub(super) struct GraphQlError {
66 pub(super) message: String,
67}