compose_lens/model/
extends.rs1use crate::source::SourceSpan;
4
5use super::{FieldReference, Located};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
9#[non_exhaustive]
10pub enum Extends {
11 Short(Located<String>),
13 Long(ExtendsReference),
15}
16
17#[derive(Debug, Clone, PartialEq, Eq)]
19pub struct ExtendsReference {
20 span: SourceSpan,
21 service: Option<Located<String>>,
22 file: Option<Located<String>>,
23 extension_fields: Vec<FieldReference>,
24 unknown_fields: Vec<FieldReference>,
25}
26
27impl ExtendsReference {
28 pub(crate) const fn new(span: SourceSpan) -> Self {
29 Self {
30 span,
31 service: None,
32 file: None,
33 extension_fields: Vec::new(),
34 unknown_fields: Vec::new(),
35 }
36 }
37
38 pub(crate) fn set_service(&mut self, value: Located<String>) {
39 self.service = Some(value);
40 }
41
42 pub(crate) fn set_file(&mut self, value: Located<String>) {
43 self.file = Some(value);
44 }
45
46 pub(crate) fn push_extension(&mut self, field: FieldReference) {
47 self.extension_fields.push(field);
48 }
49
50 pub(crate) fn push_unknown(&mut self, field: FieldReference) {
51 self.unknown_fields.push(field);
52 }
53
54 #[must_use]
56 pub const fn span(&self) -> SourceSpan {
57 self.span
58 }
59
60 #[must_use]
62 pub const fn service(&self) -> Option<&Located<String>> {
63 self.service.as_ref()
64 }
65
66 #[must_use]
68 pub const fn file(&self) -> Option<&Located<String>> {
69 self.file.as_ref()
70 }
71
72 #[must_use]
74 pub fn extension_fields(&self) -> &[FieldReference] {
75 &self.extension_fields
76 }
77
78 #[must_use]
80 pub fn unknown_fields(&self) -> &[FieldReference] {
81 &self.unknown_fields
82 }
83}