Skip to main content

forge_kit/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value as JsonValue;
3use std::collections::HashMap;
4use std::path::PathBuf;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
7pub struct Function {
8    pub name: String,
9    #[serde(default)]
10    pub version: Option<JsonValue>,
11    #[serde(default)]
12    pub description: String,
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub brackets: Option<bool>,
15    #[serde(default)]
16    pub unwrap: bool,
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub args: Option<Vec<Arg>>,
19    #[serde(default, skip_serializing_if = "Option::is_none")]
20    pub output: Option<Vec<String>>,
21    #[serde(default)]
22    pub category: Option<String>,
23    #[serde(default)]
24    pub aliases: Option<Vec<String>>,
25    #[serde(default)]
26    pub experimental: Option<bool>,
27    #[serde(default)]
28    pub examples: Option<Vec<String>>,
29    #[serde(default)]
30    pub deprecated: Option<bool>,
31    #[serde(skip)]
32    pub extension: Option<String>,
33    #[serde(skip)]
34    pub source_url: Option<String>,
35    #[serde(skip)]
36    pub local_path: Option<PathBuf>,
37    #[serde(skip)]
38    pub line: Option<u32>,
39    /// Capture any unrecognized keys so future JSON additions don't break deserialization
40    #[serde(flatten)]
41    pub extra: HashMap<String, JsonValue>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
45pub struct Arg {
46    pub name: String,
47    #[serde(default)]
48    pub description: String,
49    #[serde(default)]
50    pub rest: bool,
51    #[serde(default)]
52    pub required: Option<bool>,
53    #[serde(rename = "type", default)]
54    pub arg_type: JsonValue,
55    #[serde(default)]
56    pub condition: Option<bool>,
57    #[serde(rename = "enum", default)]
58    pub arg_enum: Option<Vec<String>>,
59    #[serde(default)]
60    pub enum_name: Option<String>,
61    #[serde(default)]
62    pub pointer: Option<i64>,
63    #[serde(default)]
64    pub pointer_property: Option<String>,
65    /// Capture unrecognized keys for forward compatibility
66    #[serde(flatten)]
67    pub extra: HashMap<String, JsonValue>,
68}
69
70/// Event definition
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct Event {
73    pub name: String,
74    #[serde(default)]
75    pub description: String,
76    #[serde(default)]
77    pub fields: Option<Vec<EventField>>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct EventField {
82    pub name: String,
83    #[serde(default)]
84    pub description: String,
85}