use gix_features::threading::OwnShared; use crate::{ file::{includes, section, Metadata}, parse, File, }; mod types; pub use types::{Error, Options}; mod comfort; /// pub mod from_env; /// pub mod from_paths; impl<'a> File<'a> { /// Return an empty `File` with the given `meta`-data to be attached to all new sections. pub fn new(meta: impl Into>) -> Self { Self { frontmatter_events: Default::default(), frontmatter_post_section: Default::default(), section_lookup_tree: Default::default(), sections: Default::default(), section_id_counter: 0, section_order: Default::default(), meta: meta.into(), } } /// Instantiate a new `File` from given `input`, associating each section and their values with /// `meta`-data, while respecting `options`. pub fn from_bytes_no_includes( input: &'a [u8], meta: impl Into>, options: Options<'_>, ) -> Result { let meta = meta.into(); Ok(Self::from_parse_events_no_includes( parse::Events::from_bytes(input, options.to_event_filter())?, meta, )) } /// Instantiate a new `File` from given `events`, associating each section and their values with /// `meta`-data. pub fn from_parse_events_no_includes( parse::Events { frontmatter, sections }: parse::Events<'a>, meta: impl Into>, ) -> Self { let meta = meta.into(); let mut this = File::new(OwnShared::clone(&meta)); this.frontmatter_events = frontmatter; for section in sections { this.push_section_internal(crate::file::Section { header: section.header, body: section::Body(section.events), meta: OwnShared::clone(&meta), id: Default::default(), }); } this } } impl File<'static> { /// Instantiate a new fully-owned `File` from given `input` (later reused as buffer when resolving includes), /// associating each section and their values with `meta`-data, while respecting `options`, and /// following includes as configured there. pub fn from_bytes_owned( input_and_buf: &mut Vec, meta: impl Into>, options: Options<'_>, ) -> Result { let mut config = Self::from_parse_events_no_includes( parse::Events::from_bytes_owned(input_and_buf, options.to_event_filter()).map_err(Error::from)?, meta, ); includes::resolve(&mut config, input_and_buf, options).map_err(Error::from)?; Ok(config) } }