[][src]Function weldr::parse

pub fn parse(
    filename: &str,
    resolver: &dyn FileRefResolver,
    source_map: &mut SourceMap
) -> Result<SourceFileRef, Error>

Parse a single file and its sub-file references recursively.

Attempt to load the content of filename via the given resolver, and parse it. Then recursiverly look for sub-file commands inside that root file, and try to resolve the content of those sub-files and parse them too. All the loaded and parsed files end up populating the given source_map, which can be pre-populated manually or from a previous call with already loaded and parsed files.

use weldr::{ FileRefResolver, parse, ResolveError, SourceMap };

struct MyCustomResolver {};

impl FileRefResolver for MyCustomResolver {
  fn resolve(&self, filename: &str) -> Result<Vec<u8>, ResolveError> {
    Ok(vec![]) // replace with custom impl
  }
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
  let resolver = MyCustomResolver{};
  let mut source_map = SourceMap::new();
  let root_file_ref = parse("root.ldr", &resolver, &mut source_map)?;
  let root_file = root_file_ref.get(&source_map);
  assert_eq!(root_file.filename, "root.ldr");
  Ok(())
}