gdb_command/
registers.rs

1//! The `Registers` is a map from register name to it's value.
2use std::collections::HashMap;
3
4use crate::error;
5
6/// `Registers` is a map from register name to it's value.
7pub type Registers = HashMap<String, u64>;
8
9pub trait RegistersExt {
10    /// Construct `Registers` from string
11    ///
12    /// # Arguments
13    ///
14    /// * 'registers' - gdb output string with registers
15    fn from_gdb<T: AsRef<str>>(registers: T) -> error::Result<Registers>;
16}
17
18impl RegistersExt for Registers {
19    fn from_gdb<T: AsRef<str>>(registers: T) -> error::Result<Registers> {
20        let mut regs = HashMap::new();
21        let splited = registers.as_ref().lines().map(|s| s.split_whitespace());
22        for mut e in splited {
23            if let Some(reg) = e.next() {
24                if let Some(value) = e.next() {
25                    regs.insert(
26                        reg.to_string(),
27                        u64::from_str_radix(value.get(2..).unwrap_or(""), 16)?,
28                    );
29                }
30            }
31        }
32        Ok(regs)
33    }
34}