browsr_types/
config.rs

1use serde::{Deserialize, Serialize};
2use crate::agent::DistriBrowserConfig;
3
4/// Browsr-specific configuration from browsr.toml
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(default, deny_unknown_fields)]
7pub struct BrowsrConfiguration {
8    pub name: String,
9    pub version: String,
10    /// Browser-specific configuration
11    #[serde(default, skip_serializing_if = "Option::is_none")]
12    pub browser: Option<DistriBrowserConfig>,
13    /// Model settings for structured extraction (analysis) - stored as JSON to avoid circular dependencies
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub structured_model_settings: Option<serde_json::Value>,
16    /// Default model settings for general use - stored as JSON to avoid circular dependencies
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub default_model_settings: Option<serde_json::Value>,
19}
20
21impl Default for BrowsrConfiguration {
22    fn default() -> Self {
23        Self {
24            name: "browsr".to_string(),
25            version: "0.1.0".to_string(),
26            browser: None,
27            structured_model_settings: None,
28            default_model_settings: None,
29        }
30    }
31}
32
33impl BrowsrConfiguration {
34    /// Load configuration from a TOML file path
35    pub async fn load_from_path<P: AsRef<std::path::Path>>(
36        path: P,
37    ) -> anyhow::Result<Self> {
38        let content = tokio::fs::read_to_string(path).await?;
39        let config: BrowsrConfiguration = toml::from_str(&content)?;
40        Ok(config)
41    }
42}
43