Skip to main content

openclaw_node/
config.rs

1//! Configuration loading and validation bindings.
2
3use napi::bindgen_prelude::*;
4use napi_derive::napi;
5use std::path::PathBuf;
6
7use openclaw_core::config::Config;
8
9use crate::error::OpenClawError;
10
11/// Load and parse an `OpenClaw` configuration file.
12///
13/// Returns the configuration as a JSON string.
14#[napi]
15pub fn load_config(path: String) -> Result<String> {
16    let config = Config::load(&PathBuf::from(&path))
17        .map_err(|e| OpenClawError::config_error(format!("Config load error: {e}")))?;
18
19    serde_json::to_string_pretty(&config)
20        .map_err(|e| OpenClawError::config_error(format!("Serialization error: {e}")).into())
21}
22
23/// Load the default configuration (~/.openclaw/openclaw.json).
24///
25/// Returns the configuration as a JSON string.
26#[napi]
27pub fn load_default_config() -> Result<String> {
28    let config = Config::load_default()
29        .map_err(|e| OpenClawError::config_error(format!("Config load error: {e}")))?;
30
31    serde_json::to_string_pretty(&config)
32        .map_err(|e| OpenClawError::config_error(format!("Serialization error: {e}")).into())
33}
34
35/// Validate configuration and return any errors.
36///
37/// Returns JSON: `{"valid": true, "errors": []}` or `{"valid": false, "errors": ["..."]}`
38#[napi]
39#[must_use]
40pub fn validate_config(path: String) -> String {
41    match Config::load(&PathBuf::from(&path)) {
42        Ok(_) => serde_json::json!({"valid": true, "errors": []}).to_string(),
43        Err(e) => serde_json::json!({"valid": false, "errors": [e.to_string()]}).to_string(),
44    }
45}