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 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}