Mountain/Binary/Initialize/
StateBuild.rs1use std::sync::Arc;
19
20use log::{debug, error, info, warn};
21#[cfg(feature = "Telemetry")]
23use opentelemetry::{KeyValue, global};
24#[cfg(feature = "Telemetry")]
25use opentelemetry::trace::Tracer;
26#[cfg(feature = "Telemetry")]
27use opentelemetry::trace::Span;
28
29use crate::{ApplicationState::ApplicationState, Environment::MountainEnvironment::MountainEnvironment};
30
31#[derive(Debug)]
33pub struct StateBuildConfig {
34 pub strict_validation:bool,
36 pub enable_snapshots:bool,
38 pub verbose_logging:bool,
40}
41
42impl Default for StateBuildConfig {
43 fn default() -> Self {
44 Self {
45 #[cfg(feature = "Debug")]
46 strict_validation:true,
47 #[cfg(not(feature = "Debug"))]
48 strict_validation:false,
49 enable_snapshots:false,
50 #[cfg(feature = "Debug")]
51 verbose_logging:true,
52 #[cfg(not(feature = "Debug"))]
53 verbose_logging:false,
54 }
55 }
56}
57
58pub fn Build(environment:MountainEnvironment) -> Result<ApplicationState, String> {
75 BuildWithConfig(environment, StateBuildConfig::default())
76}
77
78pub fn BuildWithConfig(environment:MountainEnvironment, config:StateBuildConfig) -> Result<ApplicationState, String> {
89 #[cfg(feature = "Telemetry")]
90 let span = global::tracer("StateBuild").start("Build");
91
92 info!("[StateBuild] Initializing application state");
93
94 if config.verbose_logging {
95 debug!("[StateBuild] Config: {:?}", config);
96 }
97
98 if config.strict_validation {
100 #[cfg(feature = "Telemetry")]
101 span.set_attribute(KeyValue::new("validation", "strict"));
102
103 if let Err(err) = ValidateCapabilities(&environment) {
104 error!("[StateBuild] Capability validation failed: {}", err);
105 #[cfg(feature = "Telemetry")]
106 span.set_attribute(KeyValue::new("error", err.clone()));
107 return Err(format!("Capability validation failed: {}", err));
108 }
109 info!("[StateBuild] All required capabilities validated");
110 }
111
112 let state = ApplicationState::default();
114
115 #[cfg(feature = "Telemetry")]
116 {
117 span.add_event("state_initialized", vec![]);
118 span.end();
119 }
120
121 info!("[StateBuild] Application state initialized successfully");
122 Ok(state)
123}
124
125fn ValidateCapabilities(_environment:&MountainEnvironment) -> Result<(), String> {
127 Ok(())
130}
131
132#[cfg(any(test, feature = "Test"))]
134pub fn BuildMinimal(_app_handle: tauri::AppHandle) -> Result<ApplicationState, String> {
135 info!("[StateBuild] Creating minimal test state");
136 let app_state = ApplicationState::default();
139 Ok(app_state)
140}
141
142#[cfg(test)]
143mod tests {
144 use super::*;
145
146 #[test]
150 #[ignore = "Requires tauri::AppHandle - use integration tests instead"]
151 fn test_state_build() {
152 unimplemented!("This test requires integration test setup with AppHandle");
155 }
156
157 #[test]
158 #[ignore = "Requires tauri::AppHandle - use integration tests instead"]
159 fn test_state_build_minimal() {
160 unimplemented!("This test requires integration test setup with AppHandle");
163 }
164}