evm_lens_core/storage/
layout.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
4pub enum Provenance {
5 CompilerMetadata,
6 HeuristicTrace,
7}
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
10pub enum StorageType {
11 Unknown,
13 Uint {
15 bits: u16,
16 },
17 Int {
18 bits: u16,
19 },
20 Bool,
21 Address,
22 BytesFixed {
23 size: u8,
24 },
25 BytesDynamic,
26 String,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
30pub struct StorageEntry {
31 pub slot: u128,
32 pub offset: Option<u8>,
34 pub size: Option<u8>,
36 pub r#type: StorageType,
37 pub label: Option<String>,
38 pub provenance: Provenance,
39}
40
41#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
42pub struct StorageLayout {
43 pub entries: Vec<StorageEntry>,
45}
46
47impl StorageLayout {
48 pub fn new() -> Self {
49 Self {
50 entries: Vec::new(),
51 }
52 }
53
54 pub fn add_entry(&mut self, entry: StorageEntry) {
55 self.entries.push(entry);
56 }
57}