1#![cfg_attr(not(feature = "std"), no_std)]
2#[cfg(not(feature = "std"))]
3extern crate alloc;
4
5use cu29_clock::RobotClock;
6use cu29_log_runtime::LoggerRuntime;
7use cu29_runtime::curuntime::CopperContext;
8use cu29_traits::{CuResult, UnifiedLogType};
9use cu29_unifiedlog::{stream_write, UnifiedLogger, UnifiedLoggerBuilder};
10use simplelog::TermLogger;
11#[cfg(debug_assertions)]
12use simplelog::{ColorChoice, Config, LevelFilter, TerminalMode};
13use std::path::Path;
14use std::sync::{Arc, Mutex};
15
16pub fn basic_copper_setup(
31    unifiedlogger_output_base_name: &Path,
32    slab_size: Option<usize>,
33    _text_log: bool,
34    clock: Option<RobotClock>,
35) -> CuResult<CopperContext> {
36    let preallocated_size = slab_size.unwrap_or(1024 * 1024 * 10);
37    let UnifiedLogger::Write(logger) = UnifiedLoggerBuilder::new()
38        .write(true)
39        .create(true)
40        .file_base_name(unifiedlogger_output_base_name)
41        .preallocated_size(preallocated_size)
42        .build()
43        .expect("Failed to create logger")
44    else {
45        panic!("Failed to create logger")
46    };
47    let unified_logger = Arc::new(Mutex::new(logger));
48    let structured_stream = stream_write(
49        unified_logger.clone(),
50        UnifiedLogType::StructuredLogLine,
51        4096 * 10,
52    )?;
53
54    #[cfg(debug_assertions)]
55    let extra: Option<TermLogger> = if _text_log {
56        let slow_text_logger = TermLogger::new(
57            LevelFilter::Debug,
58            Config::default(),
59            TerminalMode::Mixed,
60            ColorChoice::Auto,
61        );
62        Some(*slow_text_logger)
63    } else {
64        None
65    };
66
67    #[cfg(not(debug_assertions))]
68    let extra: Option<TermLogger> = None;
69
70    let clock = clock.unwrap_or_default();
71    let structured_logging = LoggerRuntime::init(clock.clone(), structured_stream, extra);
72    Ok(CopperContext {
73        unified_logger: unified_logger.clone(),
74        logger_runtime: structured_logging,
75        clock,
76    })
77}