diff --git a/src/ecdsa.rs b/src/ecdsa.rs index 14237e6cb7..b2477b6712 100644 --- a/src/ecdsa.rs +++ b/src/ecdsa.rs @@ -137,7 +137,7 @@ mod tests { use bincode::serialize; use ecdsa; use packet::{Packet, Packets, SharedPackets}; - use request_stage::Request; + use request::Request; use std::sync::RwLock; use transaction::Transaction; use transaction::test_tx; diff --git a/src/lib.rs b/src/lib.rs index 522cb33fc8..66c90180fe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ pub mod mint; pub mod packet; pub mod plan; pub mod recorder; +pub mod request; pub mod request_stage; pub mod result; pub mod rpu; diff --git a/src/request_stage.rs b/src/request_stage.rs index 6b9a693cd9..5f753411e0 100644 --- a/src/request_stage.rs +++ b/src/request_stage.rs @@ -5,12 +5,11 @@ use bincode::{deserialize, serialize}; use entry::Entry; use event::Event; use event_processor::EventProcessor; -use hash::Hash; use packet; use packet::SharedPackets; use rayon::prelude::*; +use request::{EntryInfo, Request, Response, Subscription}; use result::Result; -use signature::PublicKey; use std::collections::VecDeque; use std::net::{SocketAddr, UdpSocket}; use std::sync::atomic::{AtomicBool, Ordering}; @@ -21,43 +20,6 @@ use std::time::Duration; use std::time::Instant; use streamer; use timing; -use transaction::Transaction; - -#[cfg_attr(feature = "cargo-clippy", allow(large_enum_variant))] -#[derive(Serialize, Deserialize, Debug, Clone)] -pub enum Request { - Transaction(Transaction), - GetBalance { key: PublicKey }, - Subscribe { subscriptions: Vec }, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub enum Subscription { - EntryInfo, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct EntryInfo { - pub id: Hash, - pub num_hashes: u64, - pub num_events: u64, -} - -impl Request { - /// Verify the request is valid. - pub fn verify(&self) -> bool { - match *self { - Request::Transaction(ref tr) => tr.verify_plan(), - _ => true, - } - } -} - -#[derive(Serialize, Deserialize, Debug)] -pub enum Response { - Balance { key: PublicKey, val: Option }, - EntryInfo(EntryInfo), -} pub struct RequestProcessor { accountant: Arc, @@ -314,59 +276,3 @@ impl RequestStage { } } } - -#[cfg(test)] -pub fn to_request_packets(r: &packet::PacketRecycler, reqs: Vec) -> Vec { - let mut out = vec![]; - for rrs in reqs.chunks(packet::NUM_PACKETS) { - let p = r.allocate(); - p.write() - .unwrap() - .packets - .resize(rrs.len(), Default::default()); - for (i, o) in rrs.iter().zip(p.write().unwrap().packets.iter_mut()) { - let v = serialize(&i).expect("serialize request"); - let len = v.len(); - o.data[..len].copy_from_slice(&v); - o.meta.size = len; - } - out.push(p); - } - return out; -} - -#[cfg(test)] -mod tests { - use bincode::serialize; - use ecdsa; - use packet::{PacketRecycler, NUM_PACKETS}; - use request_stage::{to_request_packets, Request}; - use transaction::{memfind, test_tx}; - - #[test] - fn test_layout() { - let tr = test_tx(); - let tx = serialize(&tr).unwrap(); - let packet = serialize(&Request::Transaction(tr)).unwrap(); - assert_matches!(memfind(&packet, &tx), Some(ecdsa::TX_OFFSET)); - assert_matches!(memfind(&packet, &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), None); - } - - #[test] - fn test_to_packets() { - let tr = Request::Transaction(test_tx()); - let re = PacketRecycler::default(); - let rv = to_request_packets(&re, vec![tr.clone(); 1]); - assert_eq!(rv.len(), 1); - assert_eq!(rv[0].read().unwrap().packets.len(), 1); - - let rv = to_request_packets(&re, vec![tr.clone(); NUM_PACKETS]); - assert_eq!(rv.len(), 1); - assert_eq!(rv[0].read().unwrap().packets.len(), NUM_PACKETS); - - let rv = to_request_packets(&re, vec![tr.clone(); NUM_PACKETS + 1]); - assert_eq!(rv.len(), 2); - assert_eq!(rv[0].read().unwrap().packets.len(), NUM_PACKETS); - assert_eq!(rv[1].read().unwrap().packets.len(), 1); - } -} diff --git a/src/thin_client.rs b/src/thin_client.rs index 3517fcb819..25a5bdf2e2 100644 --- a/src/thin_client.rs +++ b/src/thin_client.rs @@ -6,7 +6,7 @@ use bincode::{deserialize, serialize}; use futures::future::{ok, FutureResult}; use hash::Hash; -use request_stage::{Request, Response, Subscription}; +use request::{Request, Response, Subscription}; use signature::{KeyPair, PublicKey, Signature}; use std::collections::HashMap; use std::io;