File size: 2,313 Bytes
4ae5926 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | // config.rs — magmad runtime configuration
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct Config {
/// REST + SSE port (external API — CLI, web, METAMINE bridge)
#[serde(default = "default_http_port")]
pub http_port: u16,
/// gRPC port (internal — agent-to-agent, BOB pipeline stages)
#[serde(default = "default_grpc_port")]
pub grpc_port: u16,
/// NATS server URL
#[serde(default = "default_nats_url")]
pub nats_url: String,
/// snap-os base URL (WORM chain + MAGMA verbs)
#[serde(default = "default_os_url")]
pub os_url: String,
/// ERRANT LFIS interpreter URL (if external; falls back to liberrant.a)
#[serde(default = "default_errant_url")]
pub errant_url: String,
/// Log level: "trace"|"debug"|"info"|"warn"|"error"
#[serde(default = "default_log_level")]
pub log_level: String,
}
fn default_http_port() -> u16 { 3000 }
fn default_grpc_port() -> u16 { 50051 }
fn default_nats_url() -> String { "nats://127.0.0.1:4222".into() }
fn default_os_url() -> String { "http://127.0.0.1:3001".into() }
fn default_errant_url() -> String { "http://127.0.0.1:4000".into() }
fn default_log_level() -> String { "info".into() }
impl Config {
/// Load from environment variables (MAGMA_ prefix), fall back to defaults.
pub fn from_env() -> Self {
Self {
http_port: env_u16("MAGMA_HTTP_PORT", 3000),
grpc_port: env_u16("MAGMA_GRPC_PORT", 50051),
nats_url: env_str("MAGMA_NATS_URL", "nats://127.0.0.1:4222"),
os_url: env_str("MAGMA_OS_URL", "http://127.0.0.1:3001"),
errant_url: env_str("MAGMA_ERRANT_URL", "http://127.0.0.1:4000"),
log_level: env_str("MAGMA_LOG", "info"),
}
}
pub fn http_addr(&self) -> String { format!("0.0.0.0:{}", self.http_port) }
pub fn grpc_addr(&self) -> String { format!("0.0.0.0:{}", self.grpc_port) }
}
fn env_str(key: &str, default: &str) -> String {
std::env::var(key).unwrap_or_else(|_| default.to_owned())
}
fn env_u16(key: &str, default: u16) -> u16 {
std::env::var(key)
.ok()
.and_then(|v| v.parse().ok())
.unwrap_or(default)
}
|