Skip to main content

seam_server/build_loader/
mod.rs

1/* src/server/core/rust/src/build_loader/mod.rs */
2
3// Load page definitions from seam build output on disk.
4// Reads route-manifest.json, loads templates, constructs PageDef with loaders.
5
6mod loader;
7mod types;
8
9#[cfg(test)]
10mod tests;
11
12use std::path::PathBuf;
13
14use crate::page::{I18nConfig, PageDef};
15
16pub use loader::{load_build_output, load_i18n_config, load_rpc_hash_map};
17pub use types::RpcHashMap;
18
19pub struct BuildOutput {
20	pub pages: Vec<PageDef>,
21	pub rpc_hash_map: Option<RpcHashMap>,
22	pub i18n_config: Option<I18nConfig>,
23	pub public_dir: Option<PathBuf>,
24}
25
26pub fn load_public_dir(dir: &str) -> Option<PathBuf> {
27	if let Ok(explicit_dir) = std::env::var("SEAM_PUBLIC_DIR") {
28		let path = PathBuf::from(explicit_dir);
29		if path.is_dir() {
30			return Some(path);
31		}
32	}
33
34	let public_root = PathBuf::from(dir).join("public-root");
35	if public_root.is_dir() {
36		return Some(public_root);
37	}
38
39	None
40}
41
42pub fn load_build(dir: &str) -> Result<BuildOutput, Box<dyn std::error::Error>> {
43	Ok(BuildOutput {
44		pages: load_build_output(dir)?,
45		rpc_hash_map: load_rpc_hash_map(dir),
46		i18n_config: load_i18n_config(dir),
47		public_dir: load_public_dir(dir),
48	})
49}