Skip to main content

katana_markdown_engine/metadata/
types.rs

1use crate::{ByteRange, KmeDocument, KmeNodeId, LineColumnRange, TextFingerprint};
2use serde::{Deserialize, Serialize};
3use std::path::PathBuf;
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6pub struct MetadataDocument {
7    pub markdown_path: PathBuf,
8    pub entries: Vec<MetadataEntry>,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12pub struct MetadataEntry {
13    pub key: String,
14    pub target: MetadataTarget,
15    pub payload: serde_json::Value,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
19pub struct MetadataTarget {
20    pub file_path: PathBuf,
21    pub node_id: KmeNodeId,
22    pub byte_range: ByteRange,
23    pub line_column_range: LineColumnRange,
24    pub text_fingerprint: TextFingerprint,
25    pub context: ContextAnchor,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
29pub struct ContextAnchor {
30    pub before: String,
31    pub after: String,
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
35pub struct TargetResolution {
36    pub key: String,
37    pub kind: TargetResolutionKind,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
41pub struct MetadataReconcileRequest {
42    pub old_document: KmeDocument,
43    pub new_document: KmeDocument,
44    pub metadata: MetadataDocument,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48pub struct MetadataReconcileResult {
49    pub metadata: MetadataDocument,
50    pub resolutions: Vec<TargetResolution>,
51}
52
53#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
54pub enum TargetResolutionKind {
55    Resolved {
56        node_id: KmeNodeId,
57    },
58    Moved {
59        previous_node_id: KmeNodeId,
60        node_id: KmeNodeId,
61    },
62    Conflict(ConflictedTarget),
63    Unresolved(UnresolvedTarget),
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
67pub struct ConflictedTarget {
68    pub previous_node_id: KmeNodeId,
69    pub candidate_node_ids: Vec<KmeNodeId>,
70    pub reason: String,
71}
72
73#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
74pub struct UnresolvedTarget {
75    pub node_id: KmeNodeId,
76    pub reason: String,
77}