fix(solc): make StorageLayout json parsing lossless (#1515)
This commit is contained in:
parent
c12033f436
commit
1d40d4e049
|
@ -1619,6 +1619,7 @@ pub struct Ewasm {
|
|||
pub wasm: String,
|
||||
}
|
||||
|
||||
/// Represents the `storage-layout` section of the `CompilerOutput` if selected.
|
||||
#[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)]
|
||||
pub struct StorageLayout {
|
||||
pub storage: Vec<Storage>,
|
||||
|
@ -1647,9 +1648,16 @@ pub struct Storage {
|
|||
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
|
||||
pub struct StorageType {
|
||||
pub encoding: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub key: Option<String>,
|
||||
pub label: String,
|
||||
#[serde(rename = "numberOfBytes")]
|
||||
pub number_of_bytes: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub value: Option<String>,
|
||||
/// additional fields
|
||||
#[serde(flatten)]
|
||||
pub other: BTreeMap<String, serde_json::Value>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
|
||||
|
@ -2120,4 +2128,11 @@ mod tests {
|
|||
let value = serde_json::to_string(&c).unwrap();
|
||||
pretty_assertions::assert_eq!(s, value);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_lossless_storage_layout() {
|
||||
let input = include_str!("../../test-data/foundryissue2462.json");
|
||||
let layout: StorageLayout = serde_json::from_str(input).unwrap();
|
||||
pretty_assertions::assert_eq!(input, &serde_json::to_string_pretty(&layout).unwrap());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"storage": [
|
||||
{
|
||||
"astId": 3,
|
||||
"contract": "test-data/foundryissue2462.sol:Token",
|
||||
"label": "x",
|
||||
"offset": 0,
|
||||
"slot": "0",
|
||||
"type": "t_uint256"
|
||||
},
|
||||
{
|
||||
"astId": 7,
|
||||
"contract": "test-data/foundryissue2462.sol:Token",
|
||||
"label": "balances",
|
||||
"offset": 0,
|
||||
"slot": "1",
|
||||
"type": "t_mapping(t_address,t_uint256)"
|
||||
},
|
||||
{
|
||||
"astId": 13,
|
||||
"contract": "test-data/foundryissue2462.sol:Token",
|
||||
"label": "allowances",
|
||||
"offset": 0,
|
||||
"slot": "2",
|
||||
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
|
||||
}
|
||||
],
|
||||
"types": {
|
||||
"t_address": {
|
||||
"encoding": "inplace",
|
||||
"label": "address",
|
||||
"numberOfBytes": "20"
|
||||
},
|
||||
"t_mapping(t_address,t_mapping(t_address,t_uint256))": {
|
||||
"encoding": "mapping",
|
||||
"key": "t_address",
|
||||
"label": "mapping(address => mapping(address => uint256))",
|
||||
"numberOfBytes": "32",
|
||||
"value": "t_mapping(t_address,t_uint256)"
|
||||
},
|
||||
"t_mapping(t_address,t_uint256)": {
|
||||
"encoding": "mapping",
|
||||
"key": "t_address",
|
||||
"label": "mapping(address => uint256)",
|
||||
"numberOfBytes": "32",
|
||||
"value": "t_uint256"
|
||||
},
|
||||
"t_uint256": {
|
||||
"encoding": "inplace",
|
||||
"label": "uint256",
|
||||
"numberOfBytes": "32"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue