1use std::collections::BTreeMap;
5
6use serde::{Deserialize, Serialize};
7
8pub use crate::conventions::{Convention, Manual};
9pub use crate::ledger::Entry;
10pub use crate::preflight::Change;
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize)]
14pub struct RepoQuery {
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub repo: Option<String>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Conventions {
22 pub conventions: Vec<ShownConvention>,
23 pub hidden: Vec<Manual>,
24 pub commit_urls: BTreeMap<String, String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct ShownConvention {
31 #[serde(flatten)]
32 pub convention: Convention,
33 pub id: String,
34 pub strength: Option<String>,
36 pub evidence: Option<String>,
38 pub few: bool,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct ConventionChange {
45 pub action: String,
46 #[serde(default, skip_serializing_if = "String::is_empty")]
47 pub id: String,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub repo: Option<String>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub dimension: Option<String>,
52 #[serde(default, skip_serializing_if = "String::is_empty")]
53 pub rule: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct ReviewRequest {
59 pub id: String,
60 pub action: String,
61 #[serde(default)]
62 pub reason: String,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct RememberRequest {
68 pub kind: String,
69 pub on: Vec<String>,
71 pub title: String,
72 #[serde(default)]
73 pub body: String,
74 #[serde(default)]
75 pub trigger: Option<String>,
76 #[serde(default)]
77 pub evidence: Vec<String>,
78 #[serde(default)]
79 pub fields: BTreeMap<String, String>,
80 #[serde(default)]
82 pub snippets: Vec<crate::ledger::Snippet>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct Remembered {
88 pub ok: bool,
89 pub id: String,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct AnswerQuery {
95 pub q: String,
96 #[serde(default, skip_serializing_if = "Option::is_none")]
97 pub repos: Option<String>,
98 #[serde(default, skip_serializing_if = "Option::is_none")]
100 pub teams: Option<String>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct AnswerFocus {
106 pub focus: String,
107}
108
109#[derive(Debug, Clone, Default, Serialize, Deserialize)]
111pub struct HookQuery {
112 pub event: String,
113 pub cwd: String,
114 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub path: Option<String>,
116 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub seen: Option<String>,
118}
119
120#[derive(Debug, Clone, Default, Serialize, Deserialize)]
122pub struct LedgerQuery {
123 #[serde(default)]
124 pub inbox: bool,
125 #[serde(default)]
126 pub check: bool,
127}
128
129#[derive(Debug, Clone, Default, Serialize, Deserialize)]
131pub struct ContractsQuery {
132 #[serde(default, skip_serializing_if = "Option::is_none")]
133 pub kind: Option<String>,
134 #[serde(default)]
135 pub dangling: bool,
136}
137
138#[derive(Debug, Clone, Default, Serialize, Deserialize)]
140pub struct StatsQuery {
141 #[serde(default, skip_serializing_if = "Option::is_none")]
142 pub repos: Option<String>,
143}
144
145#[derive(Debug, Clone, Default, Serialize, Deserialize)]
147pub struct PackagesQuery {
148 #[serde(default)]
149 pub skew: bool,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct PreflightRequest {
155 pub changes: Vec<Change>,
156}