diff --git a/crates/format/src/case.rs b/crates/format/src/case.rs index 4e1f958..59572f0 100644 --- a/crates/format/src/case.rs +++ b/crates/format/src/case.rs @@ -1,4 +1,4 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use revive_dt_common::macros::define_wrapper_type; @@ -7,7 +7,7 @@ use crate::{ mode::Mode, }; -#[derive(Debug, Default, Deserialize, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, Eq, PartialEq)] pub struct Case { pub name: Option, pub comment: Option, diff --git a/crates/format/src/input.rs b/crates/format/src/input.rs index b1dd067..810ec31 100644 --- a/crates/format/src/input.rs +++ b/crates/format/src/input.rs @@ -17,7 +17,7 @@ use revive_dt_common::macros::define_wrapper_type; use crate::traits::ResolverApi; use crate::{metadata::ContractInstance, traits::ResolutionContext}; -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)] pub struct Input { #[serde(default = "Input::default_caller")] pub caller: Address, @@ -33,7 +33,7 @@ pub struct Input { pub variable_assignments: Option, } -#[derive(Clone, Debug, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)] #[serde(untagged)] pub enum Expected { Calldata(Calldata), @@ -41,7 +41,7 @@ pub enum Expected { ExpectedMany(Vec), } -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)] pub struct ExpectedOutput { pub compiler_version: Option, pub return_data: Option, @@ -50,7 +50,7 @@ pub struct ExpectedOutput { pub exception: bool, } -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)] pub struct Event { pub address: Option, pub topics: Vec, @@ -108,7 +108,7 @@ pub struct Event { /// [`Single`]: Calldata::Single /// [`Compound`]: Calldata::Compound /// [reverse polish notation]: https://en.wikipedia.org/wiki/Reverse_Polish_notation -#[derive(Clone, Debug, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)] #[serde(untagged)] pub enum Calldata { Single(Bytes), @@ -142,7 +142,7 @@ enum Operation { } /// Specify how the contract is called. -#[derive(Debug, Default, Deserialize, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, Eq, PartialEq)] pub enum Method { /// Initiate a deploy transaction, calling contracts constructor. /// @@ -167,7 +167,7 @@ define_wrapper_type!( pub struct EtherValue(U256); ); -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)] +#[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)] pub struct VariableAssignments { /// A vector of the variable names to assign to the return data. /// diff --git a/crates/format/src/metadata.rs b/crates/format/src/metadata.rs index aad74fc..1255187 100644 --- a/crates/format/src/metadata.rs +++ b/crates/format/src/metadata.rs @@ -43,12 +43,11 @@ impl Deref for MetadataFile { } } -#[derive(Debug, Default, Deserialize, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, Eq, PartialEq)] pub struct Metadata { pub targets: Option>, pub cases: Vec, pub contracts: Option>, - // TODO: Convert into wrapper types for clarity. pub libraries: Option>>, pub ignore: Option, pub modes: Option>, diff --git a/crates/format/src/mode.rs b/crates/format/src/mode.rs index 69b55b2..8b1f4c0 100644 --- a/crates/format/src/mode.rs +++ b/crates/format/src/mode.rs @@ -16,6 +16,7 @@ pub struct SolcMode { pub solc_version: Option, solc_optimize: Option, pub llvm_optimizer_settings: Vec, + mode_string: String, } impl SolcMode { @@ -29,7 +30,10 @@ impl SolcMode { /// - A solc `SemVer version requirement` string /// - One or more `-OX` where X is a supposed to be an LLVM opt mode pub fn parse_from_mode_string(mode_string: &str) -> Option { - let mut result = Self::default(); + let mut result = Self { + mode_string: mode_string.to_string(), + ..Default::default() + }; let mut parts = mode_string.trim().split(" "); @@ -104,3 +108,16 @@ impl<'de> Deserialize<'de> for Mode { Ok(Self::Unknown(mode_string)) } } + +impl Serialize for Mode { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let string = match self { + Mode::Solidity(solc_mode) => &solc_mode.mode_string, + Mode::Unknown(string) => string, + }; + string.serialize(serializer) + } +}