Skip to main content

ferro_babe/
options.rs

1#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
2/// Selects how the disassembler handles a decoding failure after the header.
3pub enum RecoveryMode {
4    #[default]
5    /// Return the readable header and a diagnostic instead of discarding all parse information.
6    BestEffort,
7    /// Return the decoding failure as an error.
8    Strict,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12/// Immutable configuration used to create a [`Disassembler`](crate::Disassembler).
13pub struct DisassemblerOptions {
14    recovery: RecoveryMode,
15}
16
17impl Default for DisassemblerOptions {
18    fn default() -> Self {
19        Self {
20            recovery: RecoveryMode::BestEffort,
21        }
22    }
23}
24
25impl DisassemblerOptions {
26    /// Returns the configured recovery mode.
27    #[must_use]
28    pub fn recovery(&self) -> RecoveryMode {
29        self.recovery
30    }
31}
32
33#[derive(Debug, Clone, Default)]
34/// Configures a [`Disassembler`](crate::Disassembler) before construction.
35pub struct DisassemblerBuilder {
36    options: DisassemblerOptions,
37}
38
39impl DisassemblerBuilder {
40    /// Sets the recovery mode used by the resulting disassembler.
41    ///
42    /// The supplied mode replaces the builder's previous recovery mode.
43    #[must_use]
44    pub fn recovery(mut self, recovery: RecoveryMode) -> Self {
45        self.options.recovery = recovery;
46        self
47    }
48
49    /// Builds a [`Disassembler`](crate::Disassembler) from these options.
50    #[must_use]
51    pub fn build(self) -> Disassembler {
52        Disassembler::new(self.options)
53    }
54}
55
56use crate::Disassembler;