use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
pub use super::common::{
DreamConfiguration, PeerCardConfiguration, ReasoningConfiguration, SummaryConfiguration,
};
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Workspace {
pub id: String,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub metadata: HashMap<String, serde_json::Value>,
#[serde(default)]
pub configuration: WorkspaceConfiguration,
pub created_at: DateTime<Utc>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
pub struct WorkspaceConfiguration {
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning: Option<ReasoningConfiguration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub peer_card: Option<PeerCardConfiguration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<SummaryConfiguration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dream: Option<DreamConfiguration>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct WorkspaceCreate {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub configuration: Option<WorkspaceConfiguration>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct WorkspaceUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Option<HashMap<String, serde_json::Value>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub configuration: Option<Option<WorkspaceConfiguration>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct WorkspaceGet {
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<HashMap<String, serde_json::Value>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceMetadataSet {
pub metadata: HashMap<String, serde_json::Value>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceConfigurationSet {
pub configuration: serde_json::Value,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceSearchRequest {
pub query: String,
pub limit: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<HashMap<String, serde_json::Value>>,
}
pub type WorkspacePage = super::pagination::Page<Workspace>;