use std::collections::BTreeSet; use gotcha_gitea::models; use serde::{Deserialize, Serialize}; #[derive(Clone, Deserialize, Serialize)] pub struct Server { pub name: String, pub url: String, #[serde(skip)] pub token: String, } #[derive(Deserialize, Serialize)] pub struct Preferences { #[serde(default)] pub servers: Vec, #[serde(default)] pub favorites: BTreeSet, #[serde(default)] pub last_server: Option, #[serde(default = "open_status")] pub issue_status: String, #[serde(default = "open_status")] pub pull_status: String, } impl Default for Preferences { fn default() -> Self { Self { servers: Vec::new(), favorites: BTreeSet::new(), last_server: None, issue_status: open_status(), pull_status: open_status(), } } } #[derive(Clone)] pub struct RepositoryData { pub owner: String, pub name: String, pub description: String, pub language: String, pub open_issues: i64, pub updated: String, pub default_branch: String, } #[derive(Clone)] pub struct HistoryCommit { pub commit: models::Commit, pub top_lanes: Vec, pub bottom_lanes: Vec, pub node_lane: Option, pub connections: Vec, pub refs: Vec, } #[derive(Default)] pub struct State { pub preferences: Preferences, pub active_server: Option, pub active_repository: Option<(String, String)>, pub active_issue: Option, pub active_pull: Option<(String, String, i64)>, pub active_commit: Option, pub opened_from_home: bool, pub repositories: Vec, pub issues: Vec, pub pulls: Vec, pub branches: Vec, pub active_branch: Option, pub commits: Vec, } pub struct HomeData { pub activities: Vec, pub heatmap: Vec, } pub struct IssueDetails { pub issue: models::Issue, pub comments: Vec, } pub struct PullDetails { pub pull: models::PullRequest, pub comments: Vec, pub files: Vec, } pub fn open_status() -> String { "open".into() }