compose_lens/model/
logging.rs1use crate::source::SourceSpan;
4
5use super::{FieldReference, Located};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
9#[non_exhaustive]
10pub enum LoggingOptionValue {
11 String(String),
13 Number(String),
15 Null,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21pub struct LoggingOption {
22 name: Located<String>,
23 value: Located<LoggingOptionValue>,
24 span: SourceSpan,
25}
26
27impl LoggingOption {
28 pub(crate) const fn new(name: Located<String>, value: Located<LoggingOptionValue>, span: SourceSpan) -> Self {
29 Self { name, value, span }
30 }
31
32 #[must_use]
34 pub const fn name(&self) -> &Located<String> {
35 &self.name
36 }
37
38 #[must_use]
40 pub const fn value(&self) -> &Located<LoggingOptionValue> {
41 &self.value
42 }
43
44 #[must_use]
46 pub const fn span(&self) -> SourceSpan {
47 self.span
48 }
49}
50
51#[derive(Debug, Clone, PartialEq, Eq)]
53pub struct LoggingOptions {
54 span: SourceSpan,
55 entries: Vec<LoggingOption>,
56 unmodeled_entries: Vec<FieldReference>,
57}
58
59impl LoggingOptions {
60 pub(crate) const fn new(
61 span: SourceSpan,
62 entries: Vec<LoggingOption>,
63 unmodeled_entries: Vec<FieldReference>,
64 ) -> Self {
65 Self {
66 span,
67 entries,
68 unmodeled_entries,
69 }
70 }
71
72 #[must_use]
74 pub const fn span(&self) -> SourceSpan {
75 self.span
76 }
77
78 #[must_use]
80 pub fn entries(&self) -> &[LoggingOption] {
81 &self.entries
82 }
83
84 #[must_use]
86 pub fn unmodeled_entries(&self) -> &[FieldReference] {
87 &self.unmodeled_entries
88 }
89}
90
91#[derive(Debug, Clone, PartialEq, Eq)]
93pub struct Logging {
94 span: SourceSpan,
95 driver: Option<Located<String>>,
96 options: Option<LoggingOptions>,
97 extension_fields: Vec<FieldReference>,
98 unknown_fields: Vec<FieldReference>,
99}
100
101impl Logging {
102 pub(crate) const fn new(span: SourceSpan) -> Self {
103 Self {
104 span,
105 driver: None,
106 options: None,
107 extension_fields: Vec::new(),
108 unknown_fields: Vec::new(),
109 }
110 }
111
112 pub(crate) fn set_driver(&mut self, driver: Located<String>) {
113 self.driver = Some(driver);
114 }
115
116 pub(crate) fn set_options(&mut self, options: LoggingOptions) {
117 self.options = Some(options);
118 }
119
120 pub(crate) fn push_extension(&mut self, field: FieldReference) {
121 self.extension_fields.push(field);
122 }
123
124 pub(crate) fn push_unknown(&mut self, field: FieldReference) {
125 self.unknown_fields.push(field);
126 }
127
128 #[must_use]
130 pub const fn span(&self) -> SourceSpan {
131 self.span
132 }
133
134 #[must_use]
136 pub const fn driver(&self) -> Option<&Located<String>> {
137 self.driver.as_ref()
138 }
139
140 #[must_use]
142 pub const fn options(&self) -> Option<&LoggingOptions> {
143 self.options.as_ref()
144 }
145
146 #[must_use]
148 pub fn extension_fields(&self) -> &[FieldReference] {
149 &self.extension_fields
150 }
151
152 #[must_use]
154 pub fn unknown_fields(&self) -> &[FieldReference] {
155 &self.unknown_fields
156 }
157}