update versions and fix bugs
This commit is contained in:
parent
5a5f13205e
commit
b191d3517d
@ -14,14 +14,14 @@ nightly-testing = ["clippy"]
|
|||||||
with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"]
|
with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
quasi_codegen = { version = "^0.8.0", optional = true }
|
quasi_codegen = { version = "*", optional = true }
|
||||||
syntex = { version = "^0.30.0", optional = true }
|
syntex = { version = "*", optional = true }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
aster = { version = "^0.14.0", default-features = false }
|
aster = { version = "^0.15.0", default-features = false }
|
||||||
clippy = { version = "^0.*", optional = true }
|
clippy = { version = "^0.*", optional = true }
|
||||||
quasi = { version = "^0.8.0", default-features = false }
|
quasi = { version = "*", default-features = false }
|
||||||
quasi_macros = { version = "^0.8.0", optional = true }
|
quasi_macros = { version = "*", optional = true }
|
||||||
syntex = { version = "^0.30.0", optional = true }
|
syntex = { version = "*", optional = true }
|
||||||
syntex_syntax = { version = "^0.30.0", optional = true }
|
syntex_syntax = { version = "*", optional = true }
|
||||||
"ethcore-ipc" = { path = "../rpc"}
|
"ethcore-ipc" = { path = "../rpc"}
|
||||||
|
@ -282,15 +282,14 @@ fn implement_dispatch_arms(
|
|||||||
/// generates client type for specified server type
|
/// generates client type for specified server type
|
||||||
/// for say `Service` it generates `ServiceClient`
|
/// for say `Service` it generates `ServiceClient`
|
||||||
fn push_client_struct(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push: &mut FnMut(Annotatable)) {
|
fn push_client_struct(cx: &ExtCtxt, builder: &aster::AstBuilder, item: &Item, push: &mut FnMut(Annotatable)) {
|
||||||
let proxy_ident = builder.id(format!("{}Client", item.ident.name.as_str()));
|
let (_, client_ident) = get_item_idents(builder, item);
|
||||||
|
let client_struct_item = quote_item!(cx,
|
||||||
let proxy_struct_item = quote_item!(cx,
|
pub struct $client_ident <S: ::ipc::IpcSocket> {
|
||||||
pub struct $proxy_ident <S: ::ipc::IpcSocket> {
|
|
||||||
socket: ::std::cell::RefCell<S>,
|
socket: ::std::cell::RefCell<S>,
|
||||||
phantom: ::std::marker::PhantomData<S>,
|
phantom: ::std::marker::PhantomData<S>,
|
||||||
});
|
});
|
||||||
|
|
||||||
push(Annotatable::Item(proxy_struct_item.expect(&format!("could not generate proxy struct for {:?}", proxy_ident.name))));
|
push(Annotatable::Item(client_struct_item.expect(&format!("could not generate client struct for {:?}", client_ident.name))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// pushes generated code for the client class (type declaration and method invocation implementations)
|
/// pushes generated code for the client class (type declaration and method invocation implementations)
|
||||||
@ -492,7 +491,8 @@ fn push_with_socket_client_implementation(
|
|||||||
item: &Item,
|
item: &Item,
|
||||||
push: &mut FnMut(Annotatable))
|
push: &mut FnMut(Annotatable))
|
||||||
{
|
{
|
||||||
let client_ident = builder.id(format!("{}Client", item.ident.name.as_str()));
|
let (_, client_ident) = get_item_idents(builder, item);
|
||||||
|
|
||||||
let implement = quote_item!(cx,
|
let implement = quote_item!(cx,
|
||||||
impl<S> ::ipc::WithSocket<S> for $client_ident<S> where S: ::ipc::IpcSocket {
|
impl<S> ::ipc::WithSocket<S> for $client_ident<S> where S: ::ipc::IpcSocket {
|
||||||
fn init(socket: S) -> $client_ident<S> {
|
fn init(socket: S) -> $client_ident<S> {
|
||||||
@ -513,13 +513,13 @@ fn push_client_implementation(
|
|||||||
item: &Item,
|
item: &Item,
|
||||||
push: &mut FnMut(Annotatable))
|
push: &mut FnMut(Annotatable))
|
||||||
{
|
{
|
||||||
|
let (item_ident, client_ident) = get_item_idents(builder, item);
|
||||||
|
|
||||||
let mut index = -1i32;
|
let mut index = -1i32;
|
||||||
let items = dispatches.iter()
|
let items = dispatches.iter()
|
||||||
.map(|dispatch| { index = index + 1; P(implement_client_method(cx, builder, index as u16, dispatch)) })
|
.map(|dispatch| { index = index + 1; P(implement_client_method(cx, builder, index as u16, dispatch)) })
|
||||||
.collect::<Vec<P<ast::ImplItem>>>();
|
.collect::<Vec<P<ast::ImplItem>>>();
|
||||||
|
|
||||||
let client_ident = builder.id(format!("{}Client", item.ident.name.as_str()));
|
|
||||||
let item_ident = builder.id(format!("{}", item.ident.name.as_str()));
|
|
||||||
let implement = quote_item!(cx,
|
let implement = quote_item!(cx,
|
||||||
impl<S> $client_ident<S> where S: ::ipc::IpcSocket {
|
impl<S> $client_ident<S> where S: ::ipc::IpcSocket {
|
||||||
pub fn handshake(&self) -> Result<(), ::ipc::Error> {
|
pub fn handshake(&self) -> Result<(), ::ipc::Error> {
|
||||||
@ -589,6 +589,24 @@ fn implement_handshake_arm(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_item_idents(builder: &aster::AstBuilder, item: &Item) -> (::syntax::ast::Ident, ::syntax::ast::Ident) {
|
||||||
|
let ty = match item.node {
|
||||||
|
ast::ItemKind::Impl(_, _, _, _, ref ty, _) => ty.clone(),
|
||||||
|
_ => { builder.ty().id("") }
|
||||||
|
};
|
||||||
|
|
||||||
|
let (item_ident, client_ident) = match ty.node {
|
||||||
|
::syntax::ast::TyKind::Path(_, ref path) => {
|
||||||
|
(
|
||||||
|
builder.id(format!("{}", path.segments[0].identifier)),
|
||||||
|
builder.id(format!("{}Client", path.segments[0].identifier))
|
||||||
|
)
|
||||||
|
},
|
||||||
|
_ => { panic!("incompatible implementation"); }
|
||||||
|
};
|
||||||
|
(item_ident, client_ident)
|
||||||
|
}
|
||||||
|
|
||||||
/// implements `IpcInterface<C>` for the given class `C`
|
/// implements `IpcInterface<C>` for the given class `C`
|
||||||
fn implement_interface(
|
fn implement_interface(
|
||||||
cx: &ExtCtxt,
|
cx: &ExtCtxt,
|
||||||
@ -612,12 +630,10 @@ fn implement_interface(
|
|||||||
)
|
)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let ty = builder.ty().path()
|
|
||||||
.segment(item.ident).with_generics(impl_generics.clone()).build()
|
|
||||||
.build();
|
|
||||||
|
|
||||||
let where_clause = &impl_generics.where_clause;
|
let where_clause = &impl_generics.where_clause;
|
||||||
|
|
||||||
|
let (ty, _) = get_item_idents(builder, item);
|
||||||
|
|
||||||
let mut dispatch_table = Vec::new();
|
let mut dispatch_table = Vec::new();
|
||||||
for impl_item in impl_items {
|
for impl_item in impl_items {
|
||||||
if let ImplItemKind::Method(ref signature, _) = impl_item.node {
|
if let ImplItemKind::Method(ref signature, _) = impl_item.node {
|
||||||
|
@ -63,5 +63,5 @@ pub fn register(reg: &mut rustc_plugin::Registry) {
|
|||||||
reg.register_syntax_extension(
|
reg.register_syntax_extension(
|
||||||
syntax::parse::token::intern("derive_Ipc"),
|
syntax::parse::token::intern("derive_Ipc"),
|
||||||
syntax::ext::base::MultiDecorator(
|
syntax::ext::base::MultiDecorator(
|
||||||
Box::new(ser::expand_derive_serialize)));
|
Box::new(codegen::expand_ipc_implementation)));
|
||||||
}
|
}
|
||||||
|
16
ipc/serde/Cargo.toml
Normal file
16
ipc/serde/Cargo.toml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
[package]
|
||||||
|
name = "ethcore-bin-serde"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Nikolay Volf"]
|
||||||
|
build = "build.rs"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bincode = "*"
|
||||||
|
serde = "0.7.0"
|
||||||
|
ethcore-devtools = { path = "../../devtools" }
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
syntex = "*"
|
||||||
|
serde_codegen = "0.7.0"
|
30
ipc/serde/build.rs
Normal file
30
ipc/serde/build.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
extern crate syntex;
|
||||||
|
extern crate serde_codegen;
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let out_dir = env::var_os("OUT_DIR").unwrap();
|
||||||
|
let src = Path::new("src/lib.rs.in");
|
||||||
|
let dst = Path::new(&out_dir).join("lib.rs");
|
||||||
|
let mut registry = syntex::Registry::new();
|
||||||
|
serde_codegen::register(&mut registry);
|
||||||
|
registry.expand("", &src, &dst).unwrap();
|
||||||
|
}
|
17
ipc/serde/src/lib.rs
Normal file
17
ipc/serde/src/lib.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/lib.rs"));
|
18
ipc/serde/src/lib.rs.in
Normal file
18
ipc/serde/src/lib.rs.in
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct BinBox<T: FromRawBytes + BytesConvertable>([u8; mem::size_of<T>()]);
|
@ -18,6 +18,6 @@ ethcore-ipc-nano = { path = "../nano" }
|
|||||||
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
syntex = "0.30.0"
|
syntex = "*"
|
||||||
serde_codegen = "0.7.0"
|
serde_codegen = "0.7.0"
|
||||||
"ethcore-ipc-codegen" = { path = "../codegen" }
|
"ethcore-ipc-codegen" = { path = "../codegen" }
|
||||||
|
Loading…
Reference in New Issue
Block a user