From b841d6317de85c163a146e771d5716fa6609811f Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Tue, 10 Jan 2023 08:55:19 +0000 Subject: [PATCH] feat: impls SolidityTypeName & SolidityStructTy for Option --- --- a/crates/evm-coder/src/solidity/impls.rs +++ b/crates/evm-coder/src/solidity/impls.rs @@ -121,3 +121,52 @@ impl_tuples! {A B C D E F G H} impl_tuples! {A B C D E F G H I} impl_tuples! {A B C D E F G H I J} + +//----- impls for Option ----- +impl SolidityTypeName for Option { + fn solidity_name(writer: &mut impl fmt::Write, tc: &TypeCollector) -> fmt::Result { + write!(writer, "{}", tc.collect_struct::()) + } + fn is_simple() -> bool { + false + } + fn solidity_default(writer: &mut impl fmt::Write, tc: &TypeCollector) -> fmt::Result { + write!(writer, "{}(", tc.collect_struct::())?; + bool::solidity_default(writer, tc)?; + write!(writer, ", "); + T::solidity_default(writer, tc)?; + write!(writer, ")") + } +} + +impl super::SolidityStructTy for Option { + fn generate_solidity_interface(tc: &TypeCollector) -> String { + // use super::solidity::*; + + let mut solidity_name = "Option_".to_string(); + T::solidity_name(&mut solidity_name, tc); + let solidity_name_str = solidity_name.as_str(); + let interface = super::SolidityStruct { + docs: &[" Optional value"], + name: solidity_name_str, + fields: ( + super::SolidityStructField:: { + docs: &[" Shows the status of accessibility of value"], + name: "status", + ty: ::core::marker::PhantomData, + }, + super::SolidityStructField:: { + docs: &[" Actual value if `status` is true"], + name: "value", + ty: ::core::marker::PhantomData, + }, + ), + }; + + let mut out = String::new(); + let _ = interface.format(&mut out, tc); + tc.collect(out); + + solidity_name.to_string() + } +} --- a/crates/evm-coder/src/solidity/mod.rs +++ b/crates/evm-coder/src/solidity/mod.rs @@ -456,13 +456,13 @@ Ok(()) } } -pub struct SolidityStruct { - pub docs: &'static [&'static str], +pub struct SolidityStruct<'a, F> { + pub docs: &'a [&'a str], // pub generics: - pub name: &'static str, + pub name: &'a str, pub fields: F, } -impl SolidityStruct +impl SolidityStruct<'_, F> where F: SolidityItems, { -- gitstuff