katana_markdown_engine/metadata/
types.rs1use 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}