approx_spans_usage/
approx_spans_usage.rs1use rsonpath::{
2 engine::{Compiler, Engine, RsonpathEngine},
3 input::MmapInput,
4 result::MatchWriter,
5};
6use std::{env, error::Error, fs, io, process::ExitCode};
7
8fn main() -> Result<ExitCode, Box<dyn Error>> {
9 let args: Vec<_> = env::args().collect();
10
11 if args.len() != 3 {
12 eprintln!("provide exactly two arguments, query and file path");
13 return Ok(ExitCode::FAILURE);
14 }
15
16 let query_arg = &args[1];
17 let file_path = &args[2];
18
19 let query = rsonpath_syntax::parse(query_arg)?;
20 let file = fs::File::open(file_path)?;
21 let input = unsafe { MmapInput::map_file(&file)? };
23 let stdout_lock = io::stdout().lock();
24 let mut sink = MatchWriter::from(stdout_lock);
25
26 let engine = RsonpathEngine::compile_query(&query)?;
27
28 engine.approximate_spans(&input, &mut sink)?;
29
30 Ok(ExitCode::SUCCESS)
31}