browserbase 0.1.0

Rust SDK for Browserbase - cloud browser automation platform
Documentation
use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Session {
    pub id: String,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub started_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub expires_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ended_at: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub project_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub context_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub region: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub connect_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub selenium_remote_url: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub proxy_bytes: Option<u64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub avg_cpu_usage: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub memory_usage: Option<u64>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user_metadata: Option<Value>,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateSessionRequest {
    pub project_id: String,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub region: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub keep_alive: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub context_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub user_metadata: Option<Value>,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

impl CreateSessionRequest {
    pub fn new(project_id: impl Into<String>) -> Self {
        Self {
            project_id: project_id.into(),
            ..Default::default()
        }
    }

    pub fn region(mut self, region: impl Into<String>) -> Self {
        self.region = Some(region.into());
        self
    }

    pub fn keep_alive(mut self, keep_alive: bool) -> Self {
        self.keep_alive = Some(keep_alive);
        self
    }

    pub fn context_id(mut self, context_id: impl Into<String>) -> Self {
        self.context_id = Some(context_id.into());
        self
    }

    pub fn user_metadata(mut self, user_metadata: Value) -> Self {
        self.user_metadata = Some(user_metadata);
        self
    }

    pub fn insert_extra(mut self, key: impl Into<String>, value: Value) -> Self {
        self.extra.insert(key.into(), value);
        self
    }
}

#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ListSessionsParams {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub project_id: Option<String>,
}

impl ListSessionsParams {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn status(mut self, status: impl Into<String>) -> Self {
        self.status = Some(status.into());
        self
    }

    pub fn project_id(mut self, project_id: impl Into<String>) -> Self {
        self.project_id = Some(project_id.into());
        self
    }
}

#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct UpdateSessionRequest {
    pub project_id: String,
    pub status: String,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

impl UpdateSessionRequest {
    pub fn new(project_id: impl Into<String>, status: impl Into<String>) -> Self {
        Self {
            project_id: project_id.into(),
            status: status.into(),
            extra: BTreeMap::new(),
        }
    }

    pub fn insert_extra(mut self, key: impl Into<String>, value: Value) -> Self {
        self.extra.insert(key.into(), value);
        self
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Context {
    pub id: String,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub project_id: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub public_key: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cipher_algorithm: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub initialization_vector_size: Option<u32>,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateContextRequest {
    pub project_id: String,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

impl CreateContextRequest {
    pub fn new(project_id: impl Into<String>) -> Self {
        Self {
            project_id: project_id.into(),
            extra: BTreeMap::new(),
        }
    }

    pub fn insert_extra(mut self, key: impl Into<String>, value: Value) -> Self {
        self.extra.insert(key.into(), value);
        self
    }
}

#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct UpdateContextRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub upload_url: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub public_key: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cipher_algorithm: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub initialization_vector_size: Option<u32>,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

impl UpdateContextRequest {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn upload_url(mut self, upload_url: impl Into<String>) -> Self {
        self.upload_url = Some(upload_url.into());
        self
    }

    pub fn public_key(mut self, public_key: impl Into<String>) -> Self {
        self.public_key = Some(public_key.into());
        self
    }

    pub fn cipher_algorithm(mut self, cipher_algorithm: impl Into<String>) -> Self {
        self.cipher_algorithm = Some(cipher_algorithm.into());
        self
    }

    pub fn initialization_vector_size(mut self, initialization_vector_size: u32) -> Self {
        self.initialization_vector_size = Some(initialization_vector_size);
        self
    }

    pub fn insert_extra(mut self, key: impl Into<String>, value: Value) -> Self {
        self.extra.insert(key.into(), value);
        self
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Project {
    pub id: String,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub updated_at: Option<String>,

    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub owner_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub default_timeout: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub concurrency: Option<u32>,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ProjectUsage {
    pub browser_minutes: u64,
    pub proxy_bytes: u64,

    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}