Skip to main content

evtx/binxml/
mod.rs

1pub mod name;
2pub mod value_variant;
3
4pub(crate) mod array_expand;
5pub(crate) mod compiled;
6pub(crate) mod ir;
7pub(crate) mod tokens;
8pub(crate) mod value_render;
9
10pub use tokens::BinXmlTemplateValues;
11
12/// Benchmark-only helpers for IR rendering.
13#[doc(hidden)]
14#[cfg(feature = "bench")]
15pub mod bench {
16    use crate::EvtxChunk;
17    use crate::err::Result;
18    use crate::model::ir::{IrArena, Node};
19    use bumpalo::Bump;
20
21    /// Invoke the internal JSON text rendering path on a pre-built node slice.
22    pub fn write_json_text_content<'a>(
23        writer: &mut Vec<u8>,
24        arena: &'a IrArena<'a>,
25        nodes: &[Node<'a>],
26    ) -> Result<()> {
27        let _ = arena;
28        super::compiled::bench_json_text_content(writer, nodes)
29    }
30
31    /// Benchmark-only wrapper around the template cache used in IR building.
32    pub struct TreeBuildCache<'a> {
33        cache: super::ir::IrTemplateCache<'a>,
34    }
35
36    impl<'a> TreeBuildCache<'a> {
37        /// Create a cache tied to the chunk arena.
38        pub fn new(chunk: &'a EvtxChunk<'a>) -> Self {
39            TreeBuildCache {
40                cache: super::ir::IrTemplateCache::new(&chunk.arena),
41            }
42        }
43    }
44
45    /// Build an IR tree from BinXML bytes using a caller-provided bump arena.
46    pub fn build_tree_from_binxml_bytes_in_bump<'a>(
47        bytes: &'a [u8],
48        chunk: &'a EvtxChunk<'a>,
49        cache: &mut TreeBuildCache<'a>,
50        bump: &'a Bump,
51    ) -> Result<usize> {
52        super::ir::bench_build_tree_from_binxml_bytes_direct(bytes, chunk, &mut cache.cache, bump)
53    }
54}