From 483687b6bf3699f9481ab1798eb9a5e0dd662b23 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Sun, 15 May 2016 00:51:02 +0300 Subject: [PATCH] resolved remaining issues & error binary serialization --- ethcore/src/types/executed.rs | 2 +- ethcore/src/types/receipt.rs | 1 + ethcore/src/types/transaction.rs | 2 ++ ipc/codegen/src/serialization.rs | 20 +++++++++++++++----- ipc/rpc/src/binary.rs | 3 ++- ipc/tests/binary.rs.in | 6 ++++++ ipc/tests/run.rs | 2 -- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/ethcore/src/types/executed.rs b/ethcore/src/types/executed.rs index 657bcdec7..f03a1c26b 100644 --- a/ethcore/src/types/executed.rs +++ b/ethcore/src/types/executed.rs @@ -61,7 +61,7 @@ pub struct Executed { } /// Result of executing the transaction. -#[derive(PartialEq, Debug)] +#[derive(PartialEq, Debug, Binary)] pub enum ExecutionError { /// Returned when there gas paid for transaction execution is /// lower than base gas required. diff --git a/ethcore/src/types/receipt.rs b/ethcore/src/types/receipt.rs index c80407363..c851cb867 100644 --- a/ethcore/src/types/receipt.rs +++ b/ethcore/src/types/receipt.rs @@ -28,6 +28,7 @@ use log_entry::{LogEntry, LocalizedLogEntry}; use ipc::binary::BinaryConvertError; use std::mem; use std::collections::VecDeque; +use rustc_serialize::hex::FromHex; /// Information describing execution of a transaction. #[derive(Default, Debug, Clone, Binary)] diff --git a/ethcore/src/types/transaction.rs b/ethcore/src/types/transaction.rs index 2953ff896..d8454ed7a 100644 --- a/ethcore/src/types/transaction.rs +++ b/ethcore/src/types/transaction.rs @@ -29,6 +29,8 @@ use ethjson; use ipc::binary::BinaryConvertError; use std::mem; use std::collections::VecDeque; +use rustc_serialize::hex::FromHex; +use util::crypto::KeyPair; #[derive(Debug, Clone, PartialEq, Eq, Binary)] /// Transaction action type. diff --git a/ipc/codegen/src/serialization.rs b/ipc/codegen/src/serialization.rs index cf8857325..e8f3d2cd8 100644 --- a/ipc/codegen/src/serialization.rs +++ b/ipc/codegen/src/serialization.rs @@ -382,6 +382,8 @@ fn fields_sequence( use syntax::parse::token; use syntax::ast::TokenTree::Token; + let named_members = fields.iter().any(|f| f.ident.is_some()); + ::quasi::parse_expr_panic(&mut ::syntax::parse::new_parser_from_tts( ext_cx.parse_sess(), ext_cx.cfg(), @@ -389,7 +391,12 @@ fn fields_sequence( let _sp = ext_cx.call_site(); let mut tt = ::std::vec::Vec::new(); tt.push(Token(_sp, token::Ident(variant_ident.clone()))); - tt.push(Token(_sp, token::OpenDelim(token::Paren))); + if named_members { + tt.push(Token(_sp, token::OpenDelim(token::Brace))); + } + else { + tt.push(Token(_sp, token::OpenDelim(token::Paren))); + } for (idx, field) in fields.iter().enumerate() { if field.ident.is_some() { @@ -450,8 +457,12 @@ fn fields_sequence( tt.push(Token(_sp, token::CloseDelim(token::Paren))); tt.push(Token(_sp, token::Comma)); } - tt.push(Token(_sp, token::CloseDelim(token::Paren))); - + if named_members { + tt.push(Token(_sp, token::CloseDelim(token::Brace))); + } + else { + tt.push(Token(_sp, token::CloseDelim(token::Paren))); + } tt }) ).unwrap() @@ -620,7 +631,6 @@ fn binary_expr_variant( .map(|(id, field)|(field.ident.unwrap(), builder.pat().ref_id(id)))) .build(); - let binary_expr = try!(binary_expr_struct( cx, &builder, @@ -640,7 +650,7 @@ fn binary_expr_variant( let buffer = &mut buffer[1..]; $write_expr }), - read: quote_arm!(cx, $pat => { $read_expr } ), + read: quote_arm!(cx, $variant_index_ident => { $read_expr } ), }) }, } diff --git a/ipc/rpc/src/binary.rs b/ipc/rpc/src/binary.rs index 2d2bd21b7..58ab38bf1 100644 --- a/ipc/rpc/src/binary.rs +++ b/ipc/rpc/src/binary.rs @@ -17,7 +17,7 @@ //! Binary representation of types use util::bytes::Populatable; -use util::numbers::{U256, H256, H2048, Address}; +use util::numbers::{U256, U512, H256, H2048, Address}; use std::mem; use std::collections::VecDeque; use std::ops::Range; @@ -422,6 +422,7 @@ binary_fixed_size!(usize); binary_fixed_size!(i32); binary_fixed_size!(bool); binary_fixed_size!(U256); +binary_fixed_size!(U512); binary_fixed_size!(H256); binary_fixed_size!(H2048); binary_fixed_size!(Address); diff --git a/ipc/tests/binary.rs.in b/ipc/tests/binary.rs.in index 710752237..74dd39c1b 100644 --- a/ipc/tests/binary.rs.in +++ b/ipc/tests/binary.rs.in @@ -36,3 +36,9 @@ pub struct DoubleRoot { pub struct ReferenceStruct<'a> { pub ref_data: &'a u64, } + +#[derive(Binary, PartialEq, Debug)] +pub enum EnumWithStruct { + Left, + Right { how_much: u64 }, +} diff --git a/ipc/tests/run.rs b/ipc/tests/run.rs index c07145f77..cdda5275b 100644 --- a/ipc/tests/run.rs +++ b/ipc/tests/run.rs @@ -16,9 +16,7 @@ #![allow(dead_code)] -extern crate bincode; extern crate ethcore_ipc as ipc; -extern crate serde; extern crate ethcore_devtools as devtools; extern crate semver; extern crate nanomsg;