sim_expr_tree_calc/calc/face/
model.rs1use sim_codec::DecodePosition;
2use sim_kernel::EncodePosition;
3
4#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub enum FacePosition {
7 Eval,
9 Quote,
11 Data,
13 Pattern,
15}
16
17impl From<DecodePosition> for FacePosition {
18 fn from(value: DecodePosition) -> Self {
19 match value {
20 DecodePosition::Eval => Self::Eval,
21 DecodePosition::Quote => Self::Quote,
22 DecodePosition::Data => Self::Data,
23 DecodePosition::Pattern => Self::Pattern,
24 }
25 }
26}
27
28impl From<EncodePosition> for FacePosition {
29 fn from(value: EncodePosition) -> Self {
30 match value {
31 EncodePosition::Eval => Self::Eval,
32 EncodePosition::Quote => Self::Quote,
33 EncodePosition::Data => Self::Data,
34 EncodePosition::Pattern => Self::Pattern,
35 }
36 }
37}
38
39#[derive(Clone, Copy, Debug, Eq, PartialEq)]
41pub enum FaceDimension {
42 Bytes,
44 Depth,
46 Items,
48}
49
50#[derive(Clone, Debug, Eq, PartialEq)]
52pub enum FaceIssue {
53 Complete,
55 Truncated {
57 dimension: FaceDimension,
59 limit: usize,
61 observed: usize,
63 },
64 Unsupported {
66 reason: String,
68 },
69 CodecFailure {
71 message: String,
73 },
74}
75
76#[derive(Clone, Debug, Eq, PartialEq)]
78pub struct FaceMetadata {
79 pub(super) codec: Option<String>,
80 pub(super) position: FacePosition,
81 pub(super) issue: FaceIssue,
82}
83
84impl FaceMetadata {
85 #[must_use]
87 pub fn codec(&self) -> Option<&str> {
88 self.codec.as_deref()
89 }
90
91 #[must_use]
93 pub const fn position(&self) -> FacePosition {
94 self.position
95 }
96
97 #[must_use]
99 pub const fn issue(&self) -> &FaceIssue {
100 &self.issue
101 }
102
103 #[must_use]
105 pub const fn is_complete(&self) -> bool {
106 matches!(self.issue, FaceIssue::Complete)
107 }
108}
109
110#[derive(Clone, Debug, Eq, PartialEq)]
112pub enum FaceContent {
113 Text(String),
115 Bytes(Vec<u8>),
117}
118
119#[derive(Clone, Debug, Eq, PartialEq)]
121pub struct EncodedFace {
122 pub(super) content: Option<FaceContent>,
123 pub(super) metadata: FaceMetadata,
124}
125
126impl EncodedFace {
127 #[must_use]
129 pub const fn content(&self) -> Option<&FaceContent> {
130 self.content.as_ref()
131 }
132
133 #[must_use]
135 pub const fn metadata(&self) -> &FaceMetadata {
136 &self.metadata
137 }
138}
139
140#[derive(Clone, Debug, Eq, PartialEq)]
142pub struct SourceEditOutcome {
143 pub(super) metadata: FaceMetadata,
144}
145
146impl SourceEditOutcome {
147 #[must_use]
149 pub const fn applied(&self) -> bool {
150 self.metadata.is_complete()
151 }
152
153 #[must_use]
155 pub const fn metadata(&self) -> &FaceMetadata {
156 &self.metadata
157 }
158}