mapfile_parser/
lib.rs

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