1use 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}