Skip to main content

deforge_core/
config.rs

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}