sig-proxy 0.5.0

Signature-Based (Web3) Authenticating Proxy
use ethcontract::{Event, EventStatus, StreamEvent};
use serde::Serialize;
use std::error::Error;

pub fn query<T>(events: Vec<Event<T>>)
where
  T: Serialize,
{
  for event in events {
    if let Ok(json) = serde_json::to_string(&event.data) {
      std::println!("{}", json)
    }
  }
}

const ADDED: &str = "Added";
const REMOVED: &str = "Removed";

pub async fn stream<T, E>(event: Result<StreamEvent<T>, E>)
where
  T: Serialize,
  E: Error,
{
  if let Ok(event) = event {
    if let Ok(json) = serde_json::to_string(event.inner_data()) {
      let status = match event.data {
        EventStatus::Added(_) => ADDED,
        EventStatus::Removed(_) => REMOVED,
      };
      async_std::println!("{{ \"status\": \"{}\", \"event\": {} }}", status, json).await
    }
  }
}