Implement Rust web sidebar title and tree interactions

This commit is contained in:
lix-2026
2026-04-30 05:46:36 +08:00
parent 559c5ce652
commit 3cc090ba5e
35 changed files with 3029 additions and 424 deletions
+63
View File
@@ -0,0 +1,63 @@
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,
}