1#![warn(clippy::manual_let_else)]
5
6mod found_symbol_info;
7pub mod iterators;
8mod mapfile;
9mod maps_comparison_info;
10mod maybe_found_symbol_info;
11mod parser;
12mod progress_stats;
13mod section;
14mod segment;
15mod symbol;
16mod symbol_comparison_info;
17mod symbol_decomp_state;
18pub mod utils;
19
20#[cfg(feature = "objdiff_report")]
21pub mod report;
22
23pub use found_symbol_info::FoundSymbolInfo;
24pub use mapfile::MapFile;
25pub use maps_comparison_info::MapsComparisonInfo;
26pub use maybe_found_symbol_info::MaybeFoundSymbolInfo;
27pub use progress_stats::ProgressStats;
28pub use section::{PathDecompSettings, Section};
29pub use segment::Segment;
30pub use symbol::Symbol;
31pub use symbol_comparison_info::SymbolComparisonInfo;
32pub use symbol_decomp_state::{SymbolDecompState, SymbolDecompStateIter};
33
34#[deprecated(since = "2.8.0", note = "Use `Section` instead")]
36pub use Section as File;
37
38#[macro_use]
39extern crate lazy_static;
40
41#[cfg(feature = "python_bindings")]
42use pyo3::prelude::*;
43
44#[cfg(feature = "python_bindings")]
45#[pymodule(gil_used = false)]
46fn mapfile_parser(m: &Bound<'_, PyModule>) -> PyResult<()> {
47 m.add_class::<mapfile::MapFile>()?;
48 m.add_class::<segment::Segment>()?;
49 m.add_class::<section::Section>()?;
50 m.add_class::<symbol::Symbol>()?;
51 m.add_class::<found_symbol_info::python_bindings::PyFoundSymbolInfo>()?;
52 m.add_class::<symbol_comparison_info::python_bindings::PySymbolComparisonInfo>()?;
53 m.add_class::<maps_comparison_info::python_bindings::PyMapsComparisonInfo>()?;
54 m.add_class::<progress_stats::ProgressStats>()?;
55 m.add_class::<report::ReportCategories>()?;
56 Ok(())
57}
58
59#[cfg(test)]
60mod tests {
61 use std::path::PathBuf;
62
63 use crate::mapfile::MapFile;
64
65 #[test]
68 fn w0_000_map() {
69 let _ = MapFile::new_from_map_file(&PathBuf::from("tests/maps/gnuld/misc/w0_000.map"));
70 }
71}