use crate::types::common::JsonValue;
use crate::types::pagination::Page;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[non_exhaustive]
pub struct Conclusion {
pub id: String,
pub content: String,
pub observer_id: String,
pub observed_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
#[non_exhaustive]
pub struct ConclusionCreate {
pub content: String,
pub observer_id: String,
pub observed_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(finish_fn = build)]
#[non_exhaustive]
pub struct ConclusionBatchCreate {
pub conclusions: Vec<ConclusionCreate>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, bon::Builder)]
#[builder(finish_fn = build)]
#[non_exhaustive]
pub struct ConclusionGet {
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<JsonValue>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, bon::Builder)]
#[builder(on(String, into))]
#[builder(finish_fn = build)]
#[non_exhaustive]
pub struct ConclusionQuery {
pub query: String,
#[serde(default = "default_top_k", skip_serializing_if = "is_default_top_k")]
pub top_k: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub distance: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<JsonValue>,
}
fn default_top_k() -> u32 {
10
}
#[allow(clippy::trivially_copy_pass_by_ref)]
fn is_default_top_k(v: &u32) -> bool {
*v == 10
}
pub type ConclusionPage = Page<Conclusion>;