use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexManifest {
pub version: String,
pub name: String,
pub root: String,
pub languages: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileEntry {
pub path: String,
pub lang: Option<String>,
pub hash: String,
pub lines: u32,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub project: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SymbolEntry {
pub file: String,
pub name: String,
pub kind: String,
pub line: [u32; 2],
#[serde(skip_serializing_if = "Option::is_none")]
pub parent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tokens: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub project: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct SymbolOutput {
pub file: String,
pub name: String,
pub line: [u32; 2],
#[serde(skip_serializing_if = "Option::is_none")]
pub parent: Option<String>,
#[serde(skip_serializing_if = "String::is_empty")]
pub project: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<String>,
}
impl SymbolOutput {
pub fn from_entry(entry: &SymbolEntry, context: Option<String>) -> Self {
Self {
file: entry.file.clone(),
name: entry.name.clone(),
line: entry.line,
parent: entry.parent.clone(),
project: entry.project.clone(),
context,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TextEntry {
pub file: String,
pub kind: String,
pub line: [u32; 2],
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub project: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReferenceEntry {
pub file: String,
pub name: String,
pub kind: String,
pub line: [u32; 2],
#[serde(skip_serializing_if = "Option::is_none")]
pub caller: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub project: String,
}