1use chrono::Utc;
4
5use crate::{FileInfo, LineIndex, LlmsJson, ParseMeta, ParseResult, Source};
6
7#[must_use]
12pub fn build_llms_json(
13 alias: &str,
14 url: &str,
15 file_name: &str,
16 sha256: String,
17 etag: Option<String>,
18 last_modified: Option<String>,
19 parse_result: &ParseResult,
20) -> LlmsJson {
21 LlmsJson {
22 source: alias.to_string(),
23 metadata: Source {
24 url: url.to_string(),
25 etag,
26 last_modified,
27 fetched_at: Utc::now(),
28 sha256: sha256.clone(),
29 variant: crate::SourceVariant::Llms, aliases: Vec::new(),
31 tags: Vec::new(),
32 description: None,
33 category: None,
34 npm_aliases: Vec::new(),
35 github_aliases: Vec::new(),
36 origin: crate::SourceOrigin {
37 manifest: None,
38 source_type: Some(crate::SourceType::Remote {
39 url: url.to_string(),
40 }),
41 },
42 filter_non_english: None,
43 },
44 filter_stats: None,
45 toc: parse_result.toc.clone(),
46 files: vec![FileInfo {
47 path: file_name.to_string(),
48 sha256,
49 }],
50 line_index: LineIndex {
51 total_lines: parse_result.line_count,
52 byte_offsets: false,
53 },
54 diagnostics: parse_result.diagnostics.clone(),
55 parse_meta: Some(ParseMeta {
56 parser_version: 1,
57 segmentation: "structured".to_string(),
58 }),
59 }
60}