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(default, skip_serializing_if = "Option::is_none")]
32 pub extension: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub source_url: Option<String>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub local_path: Option<PathBuf>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub line: Option<u32>,
39 #[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 #[serde(flatten)]
67 pub extra: HashMap<String, JsonValue>,
68}
69
70#[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}