1use derive_more::Constructor;
2
3use crate::raw::raw_object::RawObject;
4use std::{fmt::Display, rc::Rc};
5
6#[derive(Debug, PartialEq, Eq, Hash, Clone, Constructor)]
7pub struct Inclusion {
8 pub path: Rc<String>,
9 pub required: bool,
10 pub location: Option<Location>,
11 pub val: Option<Box<RawObject>>,
12}
13
14#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
15pub enum Location {
16 File,
17 #[cfg(feature = "urls_includes")]
18 Url,
19 Classpath,
20}
21
22impl Display for Location {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 match self {
25 Location::File => write!(f, "file"),
26 #[cfg(feature = "urls_includes")]
27 Location::Url => write!(f, "url"),
28 Location::Classpath => write!(f, "classpath"),
29 }
30 }
31}
32
33impl Display for Inclusion {
34 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35 write!(f, "include ")?;
36 if self.required {
37 write!(f, "required(")?;
38 }
39 match self.location {
40 None => {
41 write!(f, "\"{}\"", self.path)?;
42 }
43 Some(location) => {
44 write!(f, "{}(", location)?;
45 write!(f, "\"{}\"", self.path)?;
46 write!(f, ")")?;
47 }
48 }
49 if self.required {
50 write!(f, ")")?;
51 }
52 Ok(())
53 }
54}