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}
62
63pub(super) fn pick_template(
65 single: &Option<String>,
66 multi: &Option<HashMap<String, String>>,
67 default_locale: Option<&str>,
68) -> Option<String> {
69 if let Some(t) = single {
70 return Some(t.clone());
71 }
72 if let Some(map) = multi {
73 if let Some(loc) = default_locale {
75 if let Some(t) = map.get(loc) {
76 return Some(t.clone());
77 }
78 }
79 return map.values().next().cloned();
80 }
81 None
82}
83
84#[derive(Deserialize)]
85pub(super) struct LoaderConfig {
86 pub(super) procedure: String,
87 #[serde(default)]
88 pub(super) params: HashMap<String, ParamConfig>,
89}
90
91#[derive(Deserialize)]
92pub(super) struct ParamConfig {
93 pub(super) from: String,
94 #[serde(rename = "type", default = "default_type")]
95 pub(super) param_type: String,
96}
97
98pub(super) fn default_type() -> String {
99 "string".to_string()
100}
101
102#[derive(Deserialize, Clone, Debug)]
104pub struct RpcHashMap {
105 pub salt: String,
106 pub batch: String,
107 pub procedures: HashMap<String, String>,
108}
109
110impl RpcHashMap {
111 pub fn reverse_lookup(&self) -> HashMap<String, String> {
113 self.procedures.iter().map(|(name, hash)| (hash.clone(), name.clone())).collect()
114 }
115}