1use std::collections::HashMap;
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
4pub struct Chunk {
5 pub content: String,
6 pub file_path: String,
7 pub start_line: usize,
8 pub end_line: usize,
9 pub language: Option<String>,
10}
11
12impl Chunk {
13 pub fn new(
14 content: String,
15 file_path: String,
16 start_line: usize,
17 end_line: usize,
18 language: Option<String>,
19 ) -> Self {
20 Self {
21 content,
22 file_path,
23 start_line,
24 end_line,
25 language,
26 }
27 }
28
29 pub fn location(&self) -> String {
30 format!("{}:{}-{}", self.file_path, self.start_line, self.end_line)
31 }
32}
33
34#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
35pub struct MatchLine {
36 pub line: usize,
37 pub content: String,
38}
39
40#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
41pub struct SearchResult {
42 pub chunk: Chunk,
43 pub score: f64,
44 #[serde(skip_serializing_if = "Vec::is_empty")]
45 pub match_lines: Vec<MatchLine>,
46}
47
48#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
49pub struct IndexStats {
50 pub indexed_files: usize,
51 pub total_chunks: usize,
52 pub languages: HashMap<String, usize>,
53}