browsr-types 0.4.0

Shared data models and schemas for Browsr browser automation flows.
Documentation
use crate::agent::BrowsrClientConfig;
use serde::{Deserialize, Serialize};

/// Browsr-specific configuration from browsr.toml
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default, deny_unknown_fields)]
pub struct BrowsrConfiguration {
    pub name: String,
    pub version: String,
    /// Browser-specific configuration
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub browser: Option<BrowsrClientConfig>,
    /// Model settings for structured extraction (analysis) - stored as JSON to avoid circular dependencies
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub structured_model_settings: Option<serde_json::Value>,
    /// Default model settings for general use - stored as JSON to avoid circular dependencies
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub default_model_settings: Option<serde_json::Value>,
}

impl Default for BrowsrConfiguration {
    fn default() -> Self {
        Self {
            name: "browsr".to_string(),
            version: "0.1.0".to_string(),
            browser: None,
            structured_model_settings: None,
            default_model_settings: None,
        }
    }
}

impl BrowsrConfiguration {
    /// Load configuration from a TOML file path
    pub async fn load_from_path<P: AsRef<std::path::Path>>(path: P) -> anyhow::Result<Self> {
        let content = tokio::fs::read_to_string(path).await?;
        let config: BrowsrConfiguration = toml::from_str(&content)?;
        Ok(config)
    }
}