mirror of
https://github.com/stefanoamorelli/crabrl.git
synced 2026-04-18 15:20:49 +00:00
feat: add core XBRL parser implementation
- High-performance parser with zero-copy design - SIMD optimizations for text processing - Memory-mapped file support - SEC EDGAR validation rules - Linkbase and schema support - Custom memory allocator with mimalloc
This commit is contained in:
40
src/bin/crabrl_bench.rs
Normal file
40
src/bin/crabrl_bench.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
use crabrl::Parser;
|
||||
use std::env;
|
||||
use std::time::Instant;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
if args.len() != 2 {
|
||||
eprintln!("Usage: {} <xbrl_file>", args[0]);
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
let filepath = &args[1];
|
||||
let parser = Parser::new();
|
||||
|
||||
let start = Instant::now();
|
||||
match parser.parse_file(filepath) {
|
||||
Ok(doc) => {
|
||||
let elapsed = start.elapsed();
|
||||
let ms = elapsed.as_secs_f64() * 1000.0;
|
||||
|
||||
println!("crabrl found: {} facts, {} contexts, {} units (in {:.3}ms)",
|
||||
doc.facts.len(),
|
||||
doc.contexts.len(),
|
||||
doc.units.len(),
|
||||
ms);
|
||||
|
||||
// Additional stats
|
||||
println!("Facts: {}", doc.facts.len());
|
||||
println!("Contexts: {}", doc.contexts.len());
|
||||
println!("Units: {}", doc.units.len());
|
||||
println!("Tuples: {}", doc.tuples.len());
|
||||
println!("Footnotes: {}", doc.footnotes.len());
|
||||
println!("Time: {:.3}ms", ms);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Error parsing file: {}", e);
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user