use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
pub use crate::doctor::Check;
pub use crate::graph::{ContractRole, ContractView, FlowStep, Node, Zoom};
pub use crate::view::View;
use super::Entry;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Overview {
pub repos: Vec<RepoSymbols>,
pub symbols: usize,
pub edges: usize,
pub cross_repo_edges: usize,
pub contracts: usize,
pub linked_contracts: usize,
pub ledger: BTreeMap<String, usize>,
pub skew: Vec<Skew>,
pub writable: bool,
pub root: Option<String>,
pub problem: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RepoSymbols {
pub repo: String,
pub symbols: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Skew {
pub package: String,
pub publisher: String,
pub published: Option<String>,
pub consumer: String,
pub locked: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AtQuery {
pub at: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OrgMap {
pub nodes: Vec<OrgNode>,
pub edges: Vec<OrgEdge>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OrgNode {
pub id: String,
pub name: String,
pub repo: String,
pub location: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OrgEdge {
pub src: String,
pub dst: String,
pub kind: String,
pub weight: usize,
pub via: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FindQuery {
pub q: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FocusQuery {
pub focus: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub budget: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeDetail {
pub zoom: Zoom,
pub graph: Neighbourhood,
pub ripple: Ripple,
pub ledger: Vec<Entry>,
pub summary: Option<String>,
pub flow: Option<Narration>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Neighbourhood {
pub nodes: Vec<Node>,
pub edges: Vec<GraphEdge>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub focus: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphEdge {
pub src: String,
pub dst: String,
pub kind: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Ripple {
pub total: usize,
pub repos: BTreeMap<String, usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Narration {
pub narration: String,
pub questions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchQuery {
pub q: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repo: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchHit {
pub id: String,
pub name: String,
pub kind: String,
pub repo: String,
pub location: String,
pub signature: Option<String>,
pub summary: Option<String>,
pub dependents: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Package {
pub ecosystem: String,
pub name: String,
pub publisher: String,
pub published: Option<String>,
pub consumer: String,
pub requirement: Option<String>,
pub locked: Option<String>,
pub skewed: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentQuery {
pub tool: String,
#[serde(default)]
pub args: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Setup {
pub index: String,
pub remote: bool,
pub version: String,
pub checks: Vec<Check>,
pub tools: Vec<Tool>,
pub agents: Vec<String>,
pub agents_md: String,
pub skill: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Tool {
pub name: String,
pub description: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowRow {
pub entry: Node,
pub steps: usize,
pub repos: Vec<String>,
pub contracts: Vec<String>,
pub summary: Option<String>,
pub narrated: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowQuery {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowDetail {
pub entry: Node,
pub narration: Option<String>,
pub questions: Option<Vec<String>>,
pub steps: Vec<FlowStep>,
}
fn around() -> usize {
6
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceQuery {
pub repo: String,
pub at: String,
#[serde(default = "around")]
pub around: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceLines {
pub path: String,
pub line: usize,
pub lines: Vec<SourceLine>,
pub commit: Option<String>,
pub link: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceLine {
pub n: usize,
pub text: String,
}