Skip to main content

context_core/cache/
versioning.rs

1use std::collections::BTreeMap;
2
3use chrono::{DateTime, Utc};
4
5use crate::types::identifiers::{DocumentId, DocumentVersion};
6
7// Key point:
8// Serializable
9// Comparable
10// Explicit defaults
11#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
12pub struct CacheBuildConfig {
13    pub version: String,
14    pub hash_algorithm: String,
15}
16
17impl CacheBuildConfig {
18    pub fn v0() -> Self {
19        Self {
20            version: "1".into(),
21            hash_algorithm: "sha256".into(),
22        }
23    }
24}
25
26#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
27pub struct ManifestDocumentEntry {
28    pub id: DocumentId,
29    pub version: DocumentVersion,
30    pub file: String,
31}
32
33#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
34pub struct CacheManifest {
35    pub cache_version: String,
36    pub build_config: CacheBuildConfig,
37    pub created_at: DateTime<Utc>, // informational only
38    pub document_count: usize,
39    pub documents: Vec<ManifestDocumentEntry>,
40}
41
42#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
43#[serde(transparent)]
44pub struct CacheIndex {
45    entries: BTreeMap<DocumentId, String>,
46}
47
48impl CacheIndex {
49    pub fn new(entries: BTreeMap<DocumentId, String>) -> Self {
50        Self { entries }
51    }
52}