hocon_rs/raw/
include.rs

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}