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>,
}