diff --git a/rpc/src/v1/traits/mod.rs b/rpc/src/v1/traits/mod.rs index 6311c282..96c884b3 100644 --- a/rpc/src/v1/traits/mod.rs +++ b/rpc/src/v1/traits/mod.rs @@ -1,7 +1,9 @@ mod blockchain; mod miner; mod raw; +mod network; pub use self::blockchain::BlockChain; pub use self::miner::Miner; -pub use self::raw::Raw; \ No newline at end of file +pub use self::raw::Raw; +pub use self::network::Network; diff --git a/rpc/src/v1/traits/network.rs b/rpc/src/v1/traits/network.rs index e69de29b..97078cb8 100644 --- a/rpc/src/v1/traits/network.rs +++ b/rpc/src/v1/traits/network.rs @@ -0,0 +1,11 @@ +use jsonrpc_core::Error; +use v1::types::AddNodeOperation; + +build_rpc_trait! { + /// Parity-bitcoin network interface + pub trait Network { + /// Add/remove/connecto to the node + #[rpc(name = "addnode")] + fn add_node(&self, String, AddNodeOperation) -> Result<(), Error>; + } +} diff --git a/rpc/src/v1/types/mod.rs.in b/rpc/src/v1/types/mod.rs.in index 0dffeec5..93f55b42 100644 --- a/rpc/src/v1/types/mod.rs.in +++ b/rpc/src/v1/types/mod.rs.in @@ -9,6 +9,7 @@ mod raw_block; mod raw_transaction; mod script; mod uint; +mod nodes; pub use self::block_template::{BlockTemplate, BlockTemplateTransaction}; pub use self::block_template_request::{BlockTemplateRequest, BlockTemplateRequestMode}; @@ -21,3 +22,4 @@ pub use self::raw_block::RawBlock; pub use self::raw_transaction::RawTransaction; pub use self::script::ScriptType; pub use self::uint::U256; +pub use self::nodes::AddNodeOperation; diff --git a/rpc/src/v1/types/nodes.rs b/rpc/src/v1/types/nodes.rs new file mode 100644 index 00000000..0ba9ff50 --- /dev/null +++ b/rpc/src/v1/types/nodes.rs @@ -0,0 +1,31 @@ +use serde::{Deserialize, Deserializer}; + +#[derive(Debug, PartialEq)] +pub enum AddNodeOperation { + Add, + Remove, + OneTry, +} + +impl Deserialize for AddNodeOperation { + fn deserialize(deserializer: &mut D) -> Result where D: Deserializer { + use serde::de::Visitor; + + struct DummyVisitor; + + impl Visitor for DummyVisitor { + type Value = AddNodeOperation; + + fn visit_str(&mut self, value: &str) -> Result where E: ::serde::de::Error { + match value { + "add" => Ok(AddNodeOperation::Add), + "remove" => Ok(AddNodeOperation::Remove), + "onetry" => Ok(AddNodeOperation::OneTry), + _ => Err(E::invalid_value(&format!("unknown ScriptType variant: {}", value))), + } + } + } + + deserializer.deserialize(DummyVisitor) + } +}