use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
pub use crate::conventions::{Convention, Manual};
pub use crate::ledger::Entry;
pub use crate::preflight::Change;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RepoQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repo: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Conventions {
pub conventions: Vec<ShownConvention>,
pub hidden: Vec<Manual>,
pub commit_urls: BTreeMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShownConvention {
#[serde(flatten)]
pub convention: Convention,
pub id: String,
pub strength: Option<String>,
pub evidence: Option<String>,
pub few: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConventionChange {
pub action: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repo: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dimension: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub rule: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReviewRequest {
pub id: String,
pub action: String,
#[serde(default)]
pub reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RememberRequest {
pub kind: String,
pub on: Vec<String>,
pub title: String,
#[serde(default)]
pub body: String,
#[serde(default)]
pub trigger: Option<String>,
#[serde(default)]
pub evidence: Vec<String>,
#[serde(default)]
pub fields: BTreeMap<String, String>,
#[serde(default)]
pub snippets: Vec<crate::ledger::Snippet>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Remembered {
pub ok: bool,
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnswerQuery {
pub q: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repos: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub teams: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnswerFocus {
pub focus: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct HookQuery {
pub event: String,
pub cwd: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seen: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LedgerQuery {
#[serde(default)]
pub inbox: bool,
#[serde(default)]
pub check: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContractsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(default)]
pub dangling: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StatsQuery {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repos: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PackagesQuery {
#[serde(default)]
pub skew: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PreflightRequest {
pub changes: Vec<Change>,
}