1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct ProjectConfig {
6 pub version: String,
7 pub name: String,
8 pub runtime: String,
9 pub language: String,
10 #[serde(rename = "functionRoot", default = "default_function_root")]
11 pub function_root: String,
12 #[serde(default)]
13 pub routing: Option<RoutingConfig>,
14 #[serde(default)]
15 pub environment: Option<EnvironmentConfig>,
16 #[serde(default)]
17 pub services: Option<ServicesConfig>,
18 #[serde(default)]
19 pub vendors: Option<VendorsConfig>,
20 #[serde(default)]
21 pub build: Option<BuildConfig>,
22 #[serde(default)]
23 pub limits: Option<LimitsConfig>,
24}
25
26fn default_function_root() -> String {
27 "./functions".to_string()
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct RoutingConfig {
32 #[serde(rename = "caseSensitive", default)]
33 pub case_sensitive: bool,
34 #[serde(rename = "trailingSlash", default)]
35 pub trailing_slash: Option<String>,
36 #[serde(default)]
37 pub routes: Option<HashMap<String, String>>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct EnvironmentConfig {
42 #[serde(default)]
43 pub variables: Option<HashMap<String, String>>,
44 #[serde(default)]
45 pub secrets: Option<Vec<String>>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct ServicesConfig {
50 #[serde(default)]
51 pub kv: Option<ServiceConfig>,
52 #[serde(default)]
53 pub database: Option<ServiceConfig>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct ServiceConfig {
58 pub enabled: bool,
59 #[serde(default)]
60 pub namespace: Option<String>,
61 #[serde(rename = "connectionString", default)]
62 pub connection_string: Option<String>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct VendorsConfig {
67 #[serde(default)]
68 pub cloudflare: Option<VendorConfig>,
69 #[serde(default)]
70 pub deno: Option<VendorConfig>,
71 #[serde(default)]
72 pub tencent: Option<VendorConfig>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct VendorConfig {
77 pub enabled: bool,
78 #[serde(default)]
79 pub options: Option<HashMap<String, serde_json::Value>>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct BuildConfig {
84 #[serde(rename = "outDir", default = "default_out_dir")]
85 pub out_dir: String,
86 #[serde(default = "default_true")]
87 pub minify: bool,
88 #[serde(default = "default_true")]
89 pub sourcemap: bool,
90 #[serde(default)]
91 pub target: Option<String>,
92}
93
94fn default_out_dir() -> String {
95 "./dist".to_string()
96}
97
98fn default_true() -> bool {
99 true
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct LimitsConfig {
104 #[serde(default)]
105 pub timeout: Option<u32>,
106 #[serde(rename = "maxPayloadSize", default)]
107 pub max_payload_size: Option<usize>,
108 #[serde(rename = "maxConcurrency", default)]
109 pub max_concurrency: Option<u32>,
110}