wip: filters
This commit is contained in:
parent
946c4912f4
commit
fe554c158c
|
@ -28,4 +28,5 @@ pub mod types;
|
||||||
/// Re-export solc for convenience
|
/// Re-export solc for convenience
|
||||||
pub use solc;
|
pub use solc;
|
||||||
|
|
||||||
mod utils;
|
/// Various utilities
|
||||||
|
pub mod utils;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::types::{Address, Bytes, H256, U256, U64};
|
use crate::types::{Address, BlockNumber, Bytes, H256, U256, U64};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// A log produced by a transaction.
|
/// A log produced by a transaction.
|
||||||
|
@ -49,3 +49,65 @@ pub struct Log {
|
||||||
/// false if its a valid log.
|
/// false if its a valid log.
|
||||||
pub removed: Option<bool>,
|
pub removed: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Filter
|
||||||
|
#[derive(Default, Debug, PartialEq, Clone, Serialize)]
|
||||||
|
pub struct Filter {
|
||||||
|
/// From Block
|
||||||
|
#[serde(rename = "fromBlock", skip_serializing_if = "Option::is_none")]
|
||||||
|
from_block: Option<BlockNumber>,
|
||||||
|
/// To Block
|
||||||
|
#[serde(rename = "toBlock", skip_serializing_if = "Option::is_none")]
|
||||||
|
to_block: Option<BlockNumber>,
|
||||||
|
/// Address
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
address: Option<ValueOrArray<Address>>,
|
||||||
|
/// Topics
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
topics: Option<Vec<Option<ValueOrArray<H256>>>>,
|
||||||
|
/// Limit
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
limit: Option<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Filter {
|
||||||
|
pub fn from_block<T: Into<BlockNumber>>(mut self, block: BlockNumber) -> Self {
|
||||||
|
self.from_block = Some(block.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_block<T: Into<BlockNumber>>(mut self, block: BlockNumber) -> Self {
|
||||||
|
self.to_block = Some(block.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
// pub fn address<T: Into<Address>>(mut self, block: BlockNumber) -> Self {
|
||||||
|
// self.to_block = Some(block.into());
|
||||||
|
// self
|
||||||
|
// }
|
||||||
|
pub fn limit(mut self, limit: usize) -> Self {
|
||||||
|
self.limit = Some(limit);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
|
pub enum ValueOrArray<T> {
|
||||||
|
Value(T),
|
||||||
|
Array(Vec<T>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Serialize for ValueOrArray<T>
|
||||||
|
where
|
||||||
|
T: Serialize,
|
||||||
|
{
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: serde::Serializer,
|
||||||
|
{
|
||||||
|
match self {
|
||||||
|
ValueOrArray::Value(inner) => inner.serialize(serializer),
|
||||||
|
ValueOrArray::Array(inner) => inner.serialize(serializer),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -20,4 +20,4 @@ mod block;
|
||||||
pub use block::{Block, BlockId, BlockNumber};
|
pub use block::{Block, BlockId, BlockNumber};
|
||||||
|
|
||||||
mod log;
|
mod log;
|
||||||
pub use log::Log;
|
pub use log::{Filter, Log};
|
||||||
|
|
11
src/utils.rs
11
src/utils.rs
|
@ -31,6 +31,17 @@ pub fn keccak256(bytes: &[u8]) -> [u8; 32] {
|
||||||
output
|
output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets the first 4 bytes
|
||||||
|
pub fn id(name: &str) -> [u8; 4] {
|
||||||
|
let mut output = [0u8; 4];
|
||||||
|
|
||||||
|
let mut hasher = Keccak::v256();
|
||||||
|
hasher.update(name.as_bytes());
|
||||||
|
hasher.finalize(&mut output);
|
||||||
|
|
||||||
|
output
|
||||||
|
}
|
||||||
|
|
||||||
/// Serialize a type. Panics if the type is returns error during serialization.
|
/// Serialize a type. Panics if the type is returns error during serialization.
|
||||||
pub fn serialize<T: serde::Serialize>(t: &T) -> serde_json::Value {
|
pub fn serialize<T: serde::Serialize>(t: &T) -> serde_json::Value {
|
||||||
serde_json::to_value(t).expect("Types never fail to serialize.")
|
serde_json::to_value(t).expect("Types never fail to serialize.")
|
||||||
|
|
Loading…
Reference in New Issue