rollout/src/config.rs
100 lines
use std::path::Path;use std::path::PathBuf;use std::sync::Arc;pub trait RolloutConfigView { fn codex_home(&self) -> &Path; fn sqlite_home(&self) -> &Path; fn cwd(&self) -> &Path; fn model_provider_id(&self) -> &str; fn generate_memories(&self) -> bool;}#[derive(Clone, Debug, PartialEq, Eq)]pub struct RolloutConfig { pub codex_home: PathBuf, pub sqlite_home: PathBuf, pub cwd: PathBuf, pub model_provider_id: String, pub generate_memories: bool,}pub type Config = RolloutConfig;impl RolloutConfig { pub fn from_view(view: &impl RolloutConfigView) -> Self { Self { codex_home: view.codex_home().to_path_buf(), sqlite_home: view.sqlite_home().to_path_buf(), cwd: view.cwd().to_path_buf(), model_provider_id: view.model_provider_id().to_string(), generate_memories: view.generate_memories(), } }}impl RolloutConfigView for RolloutConfig { fn codex_home(&self) -> &Path { self.codex_home.as_path() } fn sqlite_home(&self) -> &Path { self.sqlite_home.as_path() } fn cwd(&self) -> &Path { self.cwd.as_path() } fn model_provider_id(&self) -> &str { self.model_provider_id.as_str() } fn generate_memories(&self) -> bool { self.generate_memories }}impl<T: RolloutConfigView + ?Sized> RolloutConfigView for &T { fn codex_home(&self) -> &Path { (*self).codex_home() } fn sqlite_home(&self) -> &Path { (*self).sqlite_home() } fn cwd(&self) -> &Path { (*self).cwd() } fn model_provider_id(&self) -> &str { (*self).model_provider_id() } fn generate_memories(&self) -> bool { (*self).generate_memories() }}impl<T: RolloutConfigView + ?Sized> RolloutConfigView for Arc<T> { fn codex_home(&self) -> &Path { self.as_ref().codex_home() } fn sqlite_home(&self) -> &Path { self.as_ref().sqlite_home() } fn cwd(&self) -> &Path { self.as_ref().cwd() } fn model_provider_id(&self) -> &str { self.as_ref().model_provider_id() } fn generate_memories(&self) -> bool { self.as_ref().generate_memories() }}