284 lines
9.5 KiB
Solidity
284 lines
9.5 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity >=0.6.0 <0.9.0;
|
|
|
|
pragma experimental ABIEncoderV2;
|
|
|
|
import {VmSafe} from "./Vm.sol";
|
|
|
|
// Helpers for parsing and writing JSON files
|
|
// To parse:
|
|
// ```
|
|
// using stdJson for string;
|
|
// string memory json = vm.readFile("<some_path>");
|
|
// json.readUint("<json_path>");
|
|
// ```
|
|
// To write:
|
|
// ```
|
|
// using stdJson for string;
|
|
// string memory json = "json";
|
|
// json.serialize("a", uint256(123));
|
|
// string memory semiFinal = json.serialize("b", string("test"));
|
|
// string memory finalJson = json.serialize("c", semiFinal);
|
|
// finalJson.write("<some_path>");
|
|
// ```
|
|
|
|
library stdJson {
|
|
VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));
|
|
|
|
function keyExists(string memory json, string memory key) internal view returns (bool) {
|
|
return vm.keyExistsJson(json, key);
|
|
}
|
|
|
|
function parseRaw(string memory json, string memory key) internal pure returns (bytes memory) {
|
|
return vm.parseJson(json, key);
|
|
}
|
|
|
|
function readUint(string memory json, string memory key) internal pure returns (uint256) {
|
|
return vm.parseJsonUint(json, key);
|
|
}
|
|
|
|
function readUintArray(string memory json, string memory key) internal pure returns (uint256[] memory) {
|
|
return vm.parseJsonUintArray(json, key);
|
|
}
|
|
|
|
function readInt(string memory json, string memory key) internal pure returns (int256) {
|
|
return vm.parseJsonInt(json, key);
|
|
}
|
|
|
|
function readIntArray(string memory json, string memory key) internal pure returns (int256[] memory) {
|
|
return vm.parseJsonIntArray(json, key);
|
|
}
|
|
|
|
function readBytes32(string memory json, string memory key) internal pure returns (bytes32) {
|
|
return vm.parseJsonBytes32(json, key);
|
|
}
|
|
|
|
function readBytes32Array(string memory json, string memory key) internal pure returns (bytes32[] memory) {
|
|
return vm.parseJsonBytes32Array(json, key);
|
|
}
|
|
|
|
function readString(string memory json, string memory key) internal pure returns (string memory) {
|
|
return vm.parseJsonString(json, key);
|
|
}
|
|
|
|
function readStringArray(string memory json, string memory key) internal pure returns (string[] memory) {
|
|
return vm.parseJsonStringArray(json, key);
|
|
}
|
|
|
|
function readAddress(string memory json, string memory key) internal pure returns (address) {
|
|
return vm.parseJsonAddress(json, key);
|
|
}
|
|
|
|
function readAddressArray(string memory json, string memory key) internal pure returns (address[] memory) {
|
|
return vm.parseJsonAddressArray(json, key);
|
|
}
|
|
|
|
function readBool(string memory json, string memory key) internal pure returns (bool) {
|
|
return vm.parseJsonBool(json, key);
|
|
}
|
|
|
|
function readBoolArray(string memory json, string memory key) internal pure returns (bool[] memory) {
|
|
return vm.parseJsonBoolArray(json, key);
|
|
}
|
|
|
|
function readBytes(string memory json, string memory key) internal pure returns (bytes memory) {
|
|
return vm.parseJsonBytes(json, key);
|
|
}
|
|
|
|
function readBytesArray(string memory json, string memory key) internal pure returns (bytes[] memory) {
|
|
return vm.parseJsonBytesArray(json, key);
|
|
}
|
|
|
|
function readUintOr(string memory json, string memory key, uint256 defaultValue) internal view returns (uint256) {
|
|
return keyExists(json, key) ? readUint(json, key) : defaultValue;
|
|
}
|
|
|
|
function readUintArrayOr(string memory json, string memory key, uint256[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (uint256[] memory)
|
|
{
|
|
return keyExists(json, key) ? readUintArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function readIntOr(string memory json, string memory key, int256 defaultValue) internal view returns (int256) {
|
|
return keyExists(json, key) ? readInt(json, key) : defaultValue;
|
|
}
|
|
|
|
function readIntArrayOr(string memory json, string memory key, int256[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (int256[] memory)
|
|
{
|
|
return keyExists(json, key) ? readIntArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBytes32Or(string memory json, string memory key, bytes32 defaultValue)
|
|
internal
|
|
view
|
|
returns (bytes32)
|
|
{
|
|
return keyExists(json, key) ? readBytes32(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBytes32ArrayOr(string memory json, string memory key, bytes32[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (bytes32[] memory)
|
|
{
|
|
return keyExists(json, key) ? readBytes32Array(json, key) : defaultValue;
|
|
}
|
|
|
|
function readStringOr(string memory json, string memory key, string memory defaultValue)
|
|
internal
|
|
view
|
|
returns (string memory)
|
|
{
|
|
return keyExists(json, key) ? readString(json, key) : defaultValue;
|
|
}
|
|
|
|
function readStringArrayOr(string memory json, string memory key, string[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (string[] memory)
|
|
{
|
|
return keyExists(json, key) ? readStringArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function readAddressOr(string memory json, string memory key, address defaultValue)
|
|
internal
|
|
view
|
|
returns (address)
|
|
{
|
|
return keyExists(json, key) ? readAddress(json, key) : defaultValue;
|
|
}
|
|
|
|
function readAddressArrayOr(string memory json, string memory key, address[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (address[] memory)
|
|
{
|
|
return keyExists(json, key) ? readAddressArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBoolOr(string memory json, string memory key, bool defaultValue) internal view returns (bool) {
|
|
return keyExists(json, key) ? readBool(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBoolArrayOr(string memory json, string memory key, bool[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (bool[] memory)
|
|
{
|
|
return keyExists(json, key) ? readBoolArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBytesOr(string memory json, string memory key, bytes memory defaultValue)
|
|
internal
|
|
view
|
|
returns (bytes memory)
|
|
{
|
|
return keyExists(json, key) ? readBytes(json, key) : defaultValue;
|
|
}
|
|
|
|
function readBytesArrayOr(string memory json, string memory key, bytes[] memory defaultValue)
|
|
internal
|
|
view
|
|
returns (bytes[] memory)
|
|
{
|
|
return keyExists(json, key) ? readBytesArray(json, key) : defaultValue;
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory rootObject) internal returns (string memory) {
|
|
return vm.serializeJson(jsonKey, rootObject);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bool value) internal returns (string memory) {
|
|
return vm.serializeBool(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bool[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeBool(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, uint256 value) internal returns (string memory) {
|
|
return vm.serializeUint(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, uint256[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeUint(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, int256 value) internal returns (string memory) {
|
|
return vm.serializeInt(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, int256[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeInt(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, address value) internal returns (string memory) {
|
|
return vm.serializeAddress(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, address[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeAddress(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bytes32 value) internal returns (string memory) {
|
|
return vm.serializeBytes32(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bytes32[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeBytes32(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bytes memory value) internal returns (string memory) {
|
|
return vm.serializeBytes(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, bytes[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeBytes(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, string memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeString(jsonKey, key, value);
|
|
}
|
|
|
|
function serialize(string memory jsonKey, string memory key, string[] memory value)
|
|
internal
|
|
returns (string memory)
|
|
{
|
|
return vm.serializeString(jsonKey, key, value);
|
|
}
|
|
|
|
function write(string memory jsonKey, string memory path) internal {
|
|
vm.writeJson(jsonKey, path);
|
|
}
|
|
|
|
function write(string memory jsonKey, string memory path, string memory valueKey) internal {
|
|
vm.writeJson(jsonKey, path, valueKey);
|
|
}
|
|
}
|