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<Option<TimeLog>>,
25 pub(super) page_info: PageInfo,
27 #[serde_as(as = "DurationSeconds<String>")]
29 pub(super) total_spent_time: Duration,
30}
31
32#[derive(Debug, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub(super) struct PageInfo {
36 pub(super) has_next_page: bool,
38 pub(super) end_cursor: Option<String>,
40}
41
42#[derive(Debug, Deserialize)]
44pub(super) struct ApiResponse {
45 pub(super) data: Data,
47 pub(super) errors: Option<Vec<GraphQlError>>,
49}
50
51#[derive(Debug, Deserialize)]
53pub(super) struct Data {
54 pub(super) project: Option<Project>,
56}
57
58#[derive(Debug, Deserialize)]
60pub(super) struct GraphQlError {
61 pub(super) message: String,
62}