Skip to main content

asr/
model.rs

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}