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) mode: Option<String>,
27 #[serde(default)]
28 pub(super) cache: bool,
29 #[serde(default)]
30 pub(super) route_hashes: HashMap<String, String>,
31 #[serde(default)]
32 pub(super) content_hashes: HashMap<String, HashMap<String, String>>,
33}
34
35#[derive(Deserialize)]
36pub(super) struct LayoutEntry {
37 pub(super) template: Option<String>,
38 #[serde(default)]
39 pub(super) templates: Option<HashMap<String, String>>,
40 #[serde(default)]
41 pub(super) loaders: serde_json::Value,
42 #[serde(default)]
43 pub(super) parent: Option<String>,
44 #[serde(default)]
45 pub(super) i18n_keys: Vec<String>,
46}
47
48#[derive(Deserialize)]
49pub(super) struct RouteEntry {
50 pub(super) template: Option<String>,
51 #[serde(default)]
52 pub(super) templates: Option<HashMap<String, String>>,
53 #[serde(default)]
54 pub(super) layout: Option<String>,
55 #[serde(default)]
56 pub(super) loaders: serde_json::Value,
57 #[serde(default)]
58 pub(super) head_meta: Option<String>,
59 #[serde(default)]
60 pub(super) i18n_keys: Vec<String>,
61 #[serde(default)]
62 pub(super) projections: Option<HashMap<String, Vec<String>>>,
63}
64
65pub(super) fn pick_template(
67 single: &Option<String>,
68 multi: &Option<HashMap<String, String>>,
69 default_locale: Option<&str>,
70) -> Option<String> {
71 if let Some(t) = single {
72 return Some(t.clone());
73 }
74 if let Some(map) = multi {
75 if let Some(loc) = default_locale
77 && let Some(t) = map.get(loc)
78 {
79 return Some(t.clone());
80 }
81 return map.values().next().cloned();
82 }
83 None
84}
85
86#[derive(Deserialize)]
87pub(super) struct LoaderConfig {
88 pub(super) procedure: String,
89 #[serde(default)]
90 pub(super) params: HashMap<String, ParamConfig>,
91}
92
93#[derive(Deserialize)]
94pub(super) struct ParamConfig {
95 pub(super) from: String,
96 #[serde(rename = "type", default = "default_type")]
97 pub(super) param_type: String,
98}
99
100pub(super) fn default_type() -> String {
101 "string".to_string()
102}
103
104#[derive(Deserialize, Clone, Debug)]
106pub struct RpcHashMap {
107 pub salt: String,
108 pub batch: String,
109 pub procedures: HashMap<String, String>,
110}
111
112impl RpcHashMap {
113 pub fn reverse_lookup(&self) -> HashMap<String, String> {
115 self.procedures.iter().map(|(name, hash)| (hash.clone(), name.clone())).collect()
116 }
117}