Line data Source code
1 : use lief_ffi as ffi;
2 :
3 : use crate::common::FromFFI;
4 : use crate::dwarf::editor::types::EditorType;
5 :
6 : /// This structure represents a primitive type like `int, char`.
7 : pub struct Base {
8 : ptr: cxx::UniquePtr<ffi::DWARF_editor_BaseType>,
9 : }
10 :
11 :
12 : #[allow(non_camel_case_types)]
13 0 : #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
14 : pub enum Encoding {
15 : NONE,
16 : ADDRESS,
17 : SIGNED,
18 : SIGNED_CHAR,
19 : UNSIGNED,
20 : UNSIGNED_CHAR,
21 : BOOLEAN,
22 : FLOAT,
23 : UNKNOWN(u32),
24 : }
25 :
26 : impl From<u32> for Encoding {
27 0 : fn from(value: u32) -> Self {
28 0 : match value {
29 0 : 0x00000000 => Encoding::NONE,
30 0 : 0x00000001 => Encoding::ADDRESS,
31 0 : 0x00000002 => Encoding::SIGNED,
32 0 : 0x00000003 => Encoding::SIGNED_CHAR,
33 0 : 0x00000004 => Encoding::UNSIGNED,
34 0 : 0x00000005 => Encoding::UNSIGNED_CHAR,
35 0 : 0x00000006 => Encoding::BOOLEAN,
36 0 : 0x00000007 => Encoding::FLOAT,
37 0 : _ => Encoding::UNKNOWN(value),
38 :
39 : }
40 0 : }
41 : }
42 :
43 :
44 : impl From<Encoding> for u32 {
45 0 : fn from(value: Encoding) -> Self {
46 0 : match value {
47 0 : Encoding::NONE => 0,
48 0 : Encoding::ADDRESS => 1,
49 0 : Encoding::SIGNED => 2,
50 0 : Encoding::SIGNED_CHAR => 3,
51 0 : Encoding::UNSIGNED => 4,
52 0 : Encoding::UNSIGNED_CHAR => 5,
53 0 : Encoding::BOOLEAN => 6,
54 0 : Encoding::FLOAT => 7,
55 0 : Encoding::UNKNOWN(value) => value,
56 :
57 : }
58 0 : }
59 : }
60 :
61 : impl FromFFI<ffi::DWARF_editor_BaseType> for Base {
62 0 : fn from_ffi(cmd: cxx::UniquePtr<ffi::DWARF_editor_BaseType>) -> Self {
63 0 : Self {
64 0 : ptr: cmd,
65 0 : }
66 0 : }
67 : }
68 :
69 :
70 : impl EditorType for Base {
71 0 : fn get_base(&self) -> &ffi::DWARF_editor_Type {
72 0 : self.ptr.as_ref().unwrap().as_ref()
73 0 : }
74 : }
75 :
|