morphir_core/traversal/
event.rs1use crate::ir::{classic, v4};
4use crate::naming::PackageName;
5
6use super::IrCursor;
7
8pub type ClassicV3Module = classic::ModuleEntry<classic::Attrs, classic::Type<classic::Attrs>>;
10
11#[derive(Debug, Clone, PartialEq)]
13pub enum DistributionHeader {
14 ClassicV3Library { package: classic::Path },
16 ClassicV3Specs { package: classic::Path },
18 V4Library {
20 format_version: v4::FormatVersion,
21 package: PackageName,
22 },
23 V4Specs {
25 format_version: v4::FormatVersion,
26 package: PackageName,
27 },
28 V4Application {
30 format_version: v4::FormatVersion,
31 package: PackageName,
32 entry_points: v4::EntryPoints,
33 },
34}
35
36#[derive(Debug, Clone, PartialEq)]
38pub enum DependencyEvent {
39 ClassicV3 {
41 package: classic::Path,
42 specification: classic::PackageSpecification<classic::Attrs>,
43 },
44 V4 {
46 package: String,
47 specification: v4::PackageSpecification,
48 },
49 V4Definition {
52 package: String,
53 definition: v4::PackageDefinition,
54 },
55}
56
57#[derive(Debug, Clone, PartialEq)]
59pub enum ModuleEvent {
60 ClassicV3(ClassicV3Module),
62 ClassicV3Specification {
64 path: classic::Path,
65 specification: classic::ModuleSpecification<classic::Attrs>,
66 },
67 V4Definition {
69 path: String,
70 module: v4::AccessControlled<v4::ModuleDefinition>,
71 },
72 V4Specification {
74 path: String,
75 module: v4::ModuleSpecification,
76 },
77}
78
79#[derive(Debug, Clone, PartialEq)]
81pub enum SemanticEventKind {
82 Begin(DistributionHeader),
84 DocumentMetadata(Box<v4::DocumentMeta>),
86 Dependency(DependencyEvent),
88 Module(ModuleEvent),
90 End,
92}
93
94#[derive(Debug, Clone, PartialEq)]
96pub struct SemanticEvent {
97 cursor: IrCursor,
98 kind: SemanticEventKind,
99}
100
101impl SemanticEvent {
102 pub fn new(cursor: IrCursor, kind: SemanticEventKind) -> Self {
104 Self { cursor, kind }
105 }
106
107 pub fn cursor(&self) -> &IrCursor {
109 &self.cursor
110 }
111
112 pub fn kind(&self) -> &SemanticEventKind {
114 &self.kind
115 }
116
117 pub fn into_parts(self) -> (IrCursor, SemanticEventKind) {
119 (self.cursor, self.kind)
120 }
121}