Skip to main content

seam_server/
page.rs

1/* src/server/core/rust/src/page.rs */
2
3use std::collections::HashMap;
4use std::sync::Arc;
5
6pub type LoaderInputFn = Arc<dyn Fn(&HashMap<String, String>) -> serde_json::Value + Send + Sync>;
7
8pub struct LoaderDef {
9	pub data_key: String,
10	pub procedure: String,
11	pub input_fn: LoaderInputFn,
12}
13
14/// One entry in a layout chain (outer to inner order).
15/// Each layout owns a set of loader data keys.
16pub struct LayoutChainEntry {
17	pub id: String,
18	pub loader_keys: Vec<String>,
19}
20
21pub struct PageDef {
22	/// Axum route syntax, e.g. "/user/{id}"
23	pub route: String,
24	pub template: String,
25	/// Per-locale pre-resolved templates (layout chain already applied). Keyed by locale.
26	pub locale_templates: Option<HashMap<String, String>>,
27	pub loaders: Vec<LoaderDef>,
28	/// Script ID for the injected data JSON. Defaults to "__data".
29	pub data_id: String,
30	/// Layout chain from outer to inner. Each entry records which loader keys belong to that layout.
31	pub layout_chain: Vec<LayoutChainEntry>,
32	/// Data keys from page-level loaders (not layout). Used to split data in the data script.
33	pub page_loader_keys: Vec<String>,
34	/// Merged i18n keys from route + layout chain. Empty means include all keys.
35	pub i18n_keys: Vec<String>,
36	/// Per-loader field projections for schema narrowing. None = no narrowing.
37	pub projections: Option<HashMap<String, Vec<String>>>,
38}
39
40/// Runtime i18n configuration loaded from build output.
41#[derive(Clone)]
42pub struct I18nConfig {
43	pub locales: Vec<String>,
44	pub default: String,
45	pub mode: String,
46	pub cache: bool,
47	/// Route pattern -> route hash (8 hex)
48	pub route_hashes: HashMap<String, String>,
49	/// Route hash -> { locale -> content hash (4 hex) }
50	pub content_hashes: HashMap<String, HashMap<String, String>>,
51	/// Memory mode: locale -> routeHash -> messages
52	pub messages: HashMap<String, HashMap<String, serde_json::Value>>,
53	/// Paged mode: base directory for on-demand reads
54	pub dist_dir: Option<std::path::PathBuf>,
55}