hyperbuild/
lib.rs

1pub use crate::err::ErrorType as ErrorType;
2use crate::proc::Processor;
3use crate::unit::content::process_content;
4use crate::spec::tag::ns::Namespace;
5pub use crate::cfg::Cfg;
6
7mod cfg;
8mod err;
9mod gen;
10mod pattern;
11#[macro_use]
12mod proc;
13mod spec;
14mod tests;
15mod unit;
16
17pub fn hyperbuild(code: &mut [u8], cfg: &Cfg) -> Result<usize, (ErrorType, usize)> {
18    let mut proc = Processor::new(code);
19    match process_content(&mut proc, cfg, Namespace::Html, None) {
20        Ok(()) => Ok(proc.written_len()),
21        Err(e) => Err((e, proc.read_len())),
22    }
23}
24
25pub fn hyperbuild_truncate(code: &mut Vec<u8>, cfg: &Cfg) -> Result<(), (ErrorType, usize)> {
26    match hyperbuild(code, cfg) {
27        Ok(written_len) => {
28            code.truncate(written_len);
29            Ok(())
30        }
31        Err(e) => Err(e),
32    }
33}
34
35pub fn hyperbuild_copy(code: &[u8], cfg: &Cfg) -> Result<Vec<u8>, (ErrorType, usize)> {
36    let mut copy = code.to_vec();
37    match hyperbuild_truncate(&mut copy, cfg) {
38        Ok(()) => Ok(copy),
39        Err(e) => Err(e),
40    }
41}
42
43pub struct FriendlyError {
44    // Make public to allow destructuring.
45    pub position: usize,
46    pub message: String,
47    pub code_context: String,
48}
49
50pub fn hyperbuild_friendly_error(code: &mut [u8], cfg: &Cfg) -> Result<usize, FriendlyError> {
51    let mut proc = Processor::new(code);
52    match process_content(&mut proc, cfg, Namespace::Html, None) {
53        Ok(()) => Ok(proc.written_len()),
54        Err(e) => Err(FriendlyError {
55            position: proc.read_len(),
56            message: e.message(),
57            code_context: format!("{:?}", proc),
58        }),
59    }
60}