use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct MemoryStore {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<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 archived_at: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CreateMemoryStoreParams {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Memory {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content_sha256: Option<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(flatten)]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CreateMemoryParams {
pub path: String,
pub content: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct UpdateMemoryParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub precondition: Option<MemoryPrecondition>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct MemoryPrecondition {
#[serde(rename = "type")]
pub precondition_type: String,
pub content_sha256: String,
}
impl MemoryPrecondition {
pub fn sha256(hash: impl Into<String>) -> Self {
Self { precondition_type: "content_sha256".to_string(), content_sha256: hash.into() }
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct MemoryVersion {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memory_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub operation: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(default)]
pub redacted: bool,
#[serde(flatten)]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct MemoryStoreResource {
#[serde(rename = "type")]
pub resource_type: String,
pub memory_store_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub access: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
}
impl MemoryStoreResource {
pub fn read_write(memory_store_id: impl Into<String>) -> Self {
Self {
resource_type: "memory_store".to_string(),
memory_store_id: memory_store_id.into(),
access: Some("read_write".to_string()),
instructions: None,
}
}
pub fn read_only(memory_store_id: impl Into<String>) -> Self {
Self {
resource_type: "memory_store".to_string(),
memory_store_id: memory_store_id.into(),
access: Some("read_only".to_string()),
instructions: None,
}
}
pub fn with_instructions(mut self, instructions: impl Into<String>) -> Self {
self.instructions = Some(instructions.into());
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub(crate) struct MemoryListResponse<T> {
pub data: Vec<T>,
}