use ethabi::RawLog;
use crate::types::{Address, Bytes, H256, U256, U64};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Log {
pub address: Address,
pub topics: Vec<H256>,
pub data: Bytes,
#[serde(rename = "blockHash")]
#[serde(skip_serializing_if = "Option::is_none")]
pub block_hash: Option<H256>,
#[serde(rename = "blockNumber")]
#[serde(skip_serializing_if = "Option::is_none")]
pub block_number: Option<U64>,
#[serde(rename = "transactionHash")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_hash: Option<H256>,
#[serde(rename = "transactionIndex")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_index: Option<U64>,
#[serde(rename = "logIndex")]
#[serde(skip_serializing_if = "Option::is_none")]
pub log_index: Option<U256>,
#[serde(rename = "transactionLogIndex")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_log_index: Option<U256>,
#[serde(rename = "logType")]
#[serde(skip_serializing_if = "Option::is_none")]
pub log_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub removed: Option<bool>,
}
impl rlp::Encodable for Log {
fn rlp_append(&self, s: &mut rlp::RlpStream) {
s.begin_list(3);
s.append(&self.address);
s.append_list(&self.topics);
s.append(&self.data.0);
}
}
impl From<Log> for RawLog {
fn from(val: Log) -> Self {
(val.topics, val.data.to_vec()).into()
}
}