seam_server/build_loader/
types.rs1use std::collections::HashMap;
4
5use serde::Deserialize;
6
7#[derive(Deserialize)]
8#[allow(dead_code)]
9pub(super) struct RouteManifest {
10 #[serde(default)]
11 pub(super) layouts: HashMap<String, LayoutEntry>,
12 pub(super) routes: HashMap<String, RouteEntry>,
13 #[serde(default)]
14 pub(super) data_id: Option<String>,
15 #[serde(default)]
16 pub(super) i18n: Option<I18nManifest>,
17}
18
19#[derive(Deserialize)]
20pub(super) struct I18nManifest {
21 #[serde(default)]
22 pub(super) locales: Vec<String>,
23 #[serde(default)]
24 pub(super) default: String,
25 #[serde(default)]
26 pub(super) versions: HashMap<String, String>,
27}
28
29#[derive(Deserialize)]
30pub(super) struct LayoutEntry {
31 pub(super) template: Option<String>,
32 #[serde(default)]
33 pub(super) templates: Option<HashMap<String, String>>,
34 #[serde(default)]
35 pub(super) loaders: serde_json::Value,
36 #[serde(default)]
37 pub(super) parent: Option<String>,
38 #[serde(default)]
39 pub(super) i18n_keys: Vec<String>,
40}
41
42#[derive(Deserialize)]
43pub(super) struct RouteEntry {
44 pub(super) template: Option<String>,
45 #[serde(default)]
46 pub(super) templates: Option<HashMap<String, String>>,
47 #[serde(default)]
48 pub(super) layout: Option<String>,
49 #[serde(default)]
50 pub(super) loaders: serde_json::Value,
51 #[serde(default)]
52 pub(super) head_meta: Option<String>,
53 #[serde(default)]
54 pub(super) i18n_keys: Vec<String>,
55}
56
57pub(super) fn pick_template(
59 single: &Option<String>,
60 multi: &Option<HashMap<String, String>>,
61 default_locale: Option<&str>,
62) -> Option<String> {
63 if let Some(t) = single {
64 return Some(t.clone());
65 }
66 if let Some(map) = multi {
67 if let Some(loc) = default_locale {
69 if let Some(t) = map.get(loc) {
70 return Some(t.clone());
71 }
72 }
73 return map.values().next().cloned();
74 }
75 None
76}
77
78#[derive(Deserialize)]
79pub(super) struct LoaderConfig {
80 pub(super) procedure: String,
81 #[serde(default)]
82 pub(super) params: HashMap<String, ParamConfig>,
83}
84
85#[derive(Deserialize)]
86pub(super) struct ParamConfig {
87 pub(super) from: String,
88 #[serde(rename = "type", default = "default_type")]
89 pub(super) param_type: String,
90}
91
92pub(super) fn default_type() -> String {
93 "string".to_string()
94}
95
96#[derive(Deserialize, Clone, Debug)]
98pub struct RpcHashMap {
99 pub salt: String,
100 pub batch: String,
101 pub procedures: HashMap<String, String>,
102}
103
104impl RpcHashMap {
105 pub fn reverse_lookup(&self) -> HashMap<String, String> {
107 self.procedures.iter().map(|(name, hash)| (hash.clone(), name.clone())).collect()
108 }
109}