1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
//! This crate implements handling of proguard mapping files.
//!
//! The main use case is to re-map classes or complete stack frames, but it can
//! also be used to parse a proguard mapping line-by-line.
//!
//! The `uuid` feature also allows getting the UUID of the proguard file.
//!
//! # Examples
//!
//! ```
//! let mapping = r#"
//! android.arch.core.internal.SafeIterableMap -> a.a.a.b.c:
//! 13:13:java.util.Map$Entry eldest():168:168 -> a
//! "#;
//! let mapper = proguard::ProguardMapper::from(mapping);
//!
//! // re-mapping a classname
//! assert_eq!(
//! mapper.remap_class("a.a.a.b.c"),
//! Some("android.arch.core.internal.SafeIterableMap"),
//! );
//!
//! // re-map a stack frame
//! assert_eq!(
//! mapper
//! .remap_frame(&proguard::StackFrame::new("a.a.a.b.c", "a", 13))
//! .collect::<Vec<_>>(),
//! vec![proguard::StackFrame::new(
//! "android.arch.core.internal.SafeIterableMap",
//! "eldest",
//! 168
//! )],
//! );
//! ```
#![warn(missing_docs)]
mod java;
mod mapper;
mod mapping;
mod stacktrace;
pub use mapper::{DeobfuscatedSignature, ProguardMapper, RemappedFrameIter};
pub use mapping::{
LineMapping, MappingSummary, ParseError, ParseErrorKind, ProguardMapping, ProguardRecord,
ProguardRecordIter,
};
pub use stacktrace::{StackFrame, StackTrace, Throwable};