mabel_eno/elements/
element.rs

1use std::ops::RangeInclusive;
2
3use crate::{Attribute, Embed, Field, Flag, Item, Printer, Section};
4
5pub trait Element: std::fmt::Debug {
6    fn as_attribute(&self) -> Option<&Attribute> {
7        None
8    }
9    fn as_embed(&self) -> Option<&Embed> {
10        None
11    }
12    fn as_field(&self) -> Option<&Field> {
13        None
14    }
15    fn as_flag(&self) -> Option<&Flag> {
16        None
17    }
18    fn as_item(&self) -> Option<&Item> {
19        None
20    }
21    fn as_section(&self) -> Option<&Section> {
22        None
23    }
24    fn is_attribute(&self) -> bool {
25        false
26    }
27    fn is_embed(&self) -> bool {
28        false
29    }
30    fn is_field(&self) -> bool {
31        false
32    }
33    fn is_flag(&self) -> bool {
34        false
35    }
36    fn is_item(&self) -> bool {
37        false
38    }
39    fn is_section(&self) -> bool {
40        false
41    }
42    fn line_number(&self) -> u32;
43    fn snippet(&self) -> String;
44    fn snippet_with_options(&self, printer: &dyn Printer, gutter: bool) -> String;
45    fn touch(&self);
46}
47
48pub trait ElementImpl {
49    fn line_range(&self) -> RangeInclusive<u32>;
50    fn touched(&self) -> bool;
51}