use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
pub use super::common::PeerCardConfiguration;
#[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, PartialEq, Eq, Serialize)]
pub struct PeerMetadataSet {
pub metadata: HashMap<String, serde_json::Value>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, 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, PartialEq, Eq)]
pub struct PeerConfigurationSet {
pub configuration: PeerConfig,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct PeerCardResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub peer_card: Option<Vec<String>>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
pub struct PeerCardSet {
#[builder(into)]
pub peer_card: Vec<String>,
}
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
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>;
#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod tests {
use super::*;
#[test]
fn peer_config_is_eq() {
let a = PeerConfig {
observe_me: Some(true),
observe_others: None,
};
assert_eq!(a, a.clone());
}
#[test]
fn peer_configuration_set_is_eq() {
let a = PeerConfigurationSet {
configuration: PeerConfig::default(),
};
assert_eq!(a, a.clone());
}
#[test]
fn peer_card_response_is_eq() {
let a = PeerCardResponse {
peer_card: Some(vec!["line".to_string()]),
};
assert_eq!(a, a.clone());
}
#[test]
fn peer_card_set_is_eq() {
let a = PeerCardSet {
peer_card: vec!["line".to_string()],
};
assert_eq!(a, a.clone());
}
#[test]
fn peer_context_is_eq() {
let a = PeerContext {
peer_id: "p1".to_string(),
target_id: "p2".to_string(),
representation: None,
peer_card: None,
};
assert_eq!(a, a.clone());
}
}