use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Peer {
pub id: String,
pub workspace_id: String,
pub created_at: DateTime<Utc>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub metadata: HashMap<String, serde_json::Value>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub configuration: HashMap<String, serde_json::Value>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerCreate {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub configuration: Option<HashMap<String, serde_json::Value>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerUpdate {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, serde_json::Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub configuration: Option<HashMap<String, serde_json::Value>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerGet {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub filters: Option<HashMap<String, serde_json::Value>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize)]
pub struct PeerMetadataSet {
pub metadata: HashMap<String, serde_json::Value>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct PeerConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub observe_me: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub observe_others: Option<bool>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize)]
pub struct PeerConfigurationSet {
pub configuration: PeerConfig,
}
pub use super::common::PeerCardConfiguration;
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PeerCardResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub peer_card: Option<Vec<String>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerCardSet {
pub peer_card: Vec<String>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PeerContext {
pub peer_id: String,
pub target_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub representation: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub peer_card: Option<Vec<String>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerRepresentationGet {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_query: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_top_k: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_max_distance: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_most_frequent: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_conclusions: Option<u32>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerContextOptions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_query: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_top_k: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search_max_distance: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_most_frequent: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_conclusions: Option<u32>,
}
pub type PeerPage = super::pagination::Page<Peer>;