1use serde::{Deserialize, Serialize};
2use ts_rs::TS;
3
4#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, TS)]
5#[serde(rename_all = "snake_case")]
6pub enum HttpMethodType {
7 Get,
8 Post,
9 Head,
10 Options,
11 Patch,
12 Delete,
13 Put,
14 Trace,
15 Connect,
16}
17
18#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, TS)]
19#[serde(rename_all = "snake_case")]
20pub enum Subsystem {
21 Metadata,
22 Http,
23 Jobs,
24 SqliteFunctions,
25 #[serde(other)]
26 Unknown,
27}
28
29#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, TS)]
30#[serde(rename_all = "snake_case")]
31pub enum GuestRuntime {
32 Rust,
33 EcmaScript,
34 #[serde(other)]
35 Unknown,
36}
37
38#[derive(Clone, Debug, Deserialize, Serialize, TS)]
39pub struct HttpRoute {
40 pub method: HttpMethodType,
41 pub path: String,
42}
43
44#[derive(Clone, Debug, Deserialize, Serialize, TS)]
45pub struct Job {
46 pub name: String,
48 pub spec: String,
50 pub timeout: Option<u64>,
52}
53
54#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, TS)]
55pub enum SqliteFunctionFlag {
56 Utf8,
58 Utf16le,
61 Utf16be,
64 Utf16,
67 Deterministic,
69 DirectOnly,
71 Subtype,
74 Innocuous,
76 ResultSubtype,
79 Selforder1,
82}
83
84#[derive(Clone, Debug, Deserialize, Serialize, TS)]
85pub struct SqliteScalarFunction {
86 pub name: String,
87 pub num_args: u32,
88 pub flags: Vec<SqliteFunctionFlag>,
89}
90
91#[derive(Clone, Debug, Deserialize, Serialize, TS)]
92pub enum SqliteFunction {
93 Scalar(SqliteScalarFunction),
94}
95
96#[derive(Clone, Debug, Default, Deserialize, Serialize, TS)]
98#[ts(optional_fields)]
99pub struct Metadata {
100 pub display_name: Option<String>,
102 pub description: Option<String>,
104 pub icon: Option<String>,
107 pub guest_runtime: Option<GuestRuntime>,
109 pub version: Option<String>,
111 pub admin_ui_path: Option<String>,
113}
114
115impl std::fmt::Display for Metadata {
116 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
117 return write!(
118 fmt,
119 "Metadata(display_name={}, rt={:?})",
120 self.display_name.as_deref().unwrap_or("??"),
121 self.guest_runtime.unwrap_or(GuestRuntime::Unknown),
122 );
123 }
124}
125
126#[derive(Clone, Debug, Default, Deserialize, Serialize, TS)]
127#[ts(export)]
128pub struct InitArguments {
129 pub version: Option<String>,
131
132 pub subsystems: Option<Vec<Subsystem>>,
134}
135
136#[derive(Clone, Debug, Default, Deserialize, Serialize, TS)]
137#[ts(export)]
138pub struct InitManifest {
139 pub metadata: Option<Metadata>,
141
142 pub http_handlers: Option<Vec<HttpRoute>>,
144
145 pub job_handlers: Option<Vec<Job>>,
147
148 pub sqlite_functions: Option<Vec<SqliteFunction>>,
150}