Files
mnote/rust/crates/core-protocol/src/search.rs
T

64 lines
1.8 KiB
Rust
Raw Normal View History

use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct SearchQuery {
pub query: String,
pub workspace_id: String,
pub scope: SearchScope,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_id: Option<String>,
pub limit: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum SearchScope {
Workspace,
CurrentPage,
Pinned,
Recent,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SearchResultProjection {
pub id: String,
pub title: String,
pub snippet: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
pub match_field: String,
pub has_ocr: bool,
pub public_path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub node_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subtree_root_id: Option<String>,
#[serde(default)]
pub evidence: Vec<SearchHighlight>,
pub score: f64,
pub projection_owner: SearchProjectionOwner,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SearchHighlight {
pub kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub node_id: Option<String>,
pub snippet: String,
#[serde(default, skip_serializing_if = "Value::is_null")]
pub meta: Value,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum SearchProjectionOwner {
RustKernel,
CompatIndex,
}