Skip to main content

runx_contracts/
list.rs

1//! Native list command report contracts.
2use serde::{Deserialize, Serialize};
3
4use crate::schema::RunxSchema;
5
6#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
7pub enum RunxListSchema {
8    #[serde(rename = "runx.list.v1")]
9    V1,
10}
11
12impl PartialEq<&str> for RunxListSchema {
13    fn eq(&self, other: &&str) -> bool {
14        matches!((self, *other), (Self::V1, "runx.list.v1"))
15    }
16}
17
18#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
19#[serde(rename_all = "lowercase")]
20pub enum RunxListRequestedKind {
21    All,
22    Tools,
23    Skills,
24    Graphs,
25    Packets,
26    Overlays,
27}
28
29#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
30#[serde(rename_all = "lowercase")]
31pub enum RunxListItemKind {
32    Tool,
33    Skill,
34    Graph,
35    Packet,
36    Overlay,
37}
38
39#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
40#[serde(rename_all = "kebab-case")]
41pub enum RunxListSource {
42    Local,
43    Workspace,
44    Dependencies,
45    BuiltIn,
46}
47
48#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
49#[serde(rename_all = "lowercase")]
50pub enum RunxListStatus {
51    Ok,
52    Invalid,
53}
54
55#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
56#[serde(deny_unknown_fields)]
57pub struct RunxListEmit {
58    pub name: String,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub packet: Option<String>,
61}
62
63#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
64#[serde(deny_unknown_fields)]
65pub struct RunxListItem {
66    pub kind: RunxListItemKind,
67    pub name: String,
68    pub source: RunxListSource,
69    pub path: String,
70    pub status: RunxListStatus,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub diagnostics: Option<Vec<String>>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub scopes: Option<Vec<String>>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub emits: Option<Vec<RunxListEmit>>,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub fixtures: Option<u64>,
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub harness_cases: Option<u64>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub steps: Option<u64>,
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub wraps: Option<String>,
85}
86
87#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, RunxSchema)]
88#[serde(deny_unknown_fields)]
89#[runx_schema(id = "runx.list.v1")]
90pub struct RunxListReport {
91    pub schema: RunxListSchema,
92    pub root: String,
93    pub requested_kind: RunxListRequestedKind,
94    pub items: Vec<RunxListItem>,
95}