compose_lens/model/
environment.rs1use super::{ComposeScalar, Located};
4use crate::source::SourceSpan;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct EnvironmentListEntry {
9 raw: Located<String>,
10 name: String,
11 value: Option<String>,
12}
13
14impl EnvironmentListEntry {
15 pub(super) fn parse(raw: Located<String>) -> Self {
16 let (name, value) = raw.value().split_once('=').map_or_else(
17 || (raw.value().clone(), None),
18 |(name, value)| (name.to_owned(), Some(value.to_owned())),
19 );
20 Self { raw, name, value }
21 }
22
23 #[must_use]
25 pub const fn raw(&self) -> &Located<String> {
26 &self.raw
27 }
28
29 #[must_use]
31 pub fn name(&self) -> &str {
32 &self.name
33 }
34
35 #[must_use]
39 pub fn value(&self) -> Option<&str> {
40 self.value.as_deref()
41 }
42}
43
44#[derive(Debug, Clone, PartialEq, Eq)]
46pub struct EnvironmentMapEntry {
47 name: Located<String>,
48 value: Located<ComposeScalar>,
49 span: SourceSpan,
50}
51
52impl EnvironmentMapEntry {
53 pub(super) const fn new(name: Located<String>, value: Located<ComposeScalar>, span: SourceSpan) -> Self {
54 Self { name, value, span }
55 }
56
57 #[must_use]
59 pub const fn name(&self) -> &Located<String> {
60 &self.name
61 }
62
63 #[must_use]
65 pub const fn value(&self) -> &Located<ComposeScalar> {
66 &self.value
67 }
68
69 #[must_use]
71 pub const fn span(&self) -> SourceSpan {
72 self.span
73 }
74}
75
76#[derive(Debug, Clone, PartialEq, Eq)]
78pub enum Environment {
79 List {
81 span: SourceSpan,
83 entries: Vec<EnvironmentListEntry>,
85 },
86 Map {
88 span: SourceSpan,
90 entries: Vec<EnvironmentMapEntry>,
92 },
93}
94
95impl Environment {
96 #[must_use]
98 pub const fn span(&self) -> SourceSpan {
99 match self {
100 Self::List { span, .. } | Self::Map { span, .. } => *span,
101 }
102 }
103}