use errors::CoreError;
use futures::sync::mpsc;
use routing::{AccountInfo, ImmutableData, MutableData, PermissionSet, User, Value};
use rust_sodium::crypto::sign;
use std::collections::{BTreeMap, BTreeSet};
pub const NETWORK_EVENT_START_RANGE: i32 = 0;
#[cfg_attr(feature = "cargo-clippy", allow(large_enum_variant))]
#[derive(Debug)]
pub enum CoreEvent {
GetAccountInfo(Result<AccountInfo, CoreError>),
Mutation(Result<(), CoreError>),
GetIData(Result<ImmutableData, CoreError>),
GetMDataVersion(Result<u64, CoreError>),
ListMDataEntries(Result<BTreeMap<Vec<u8>, Value>, CoreError>),
ListMDataKeys(Result<BTreeSet<Vec<u8>>, CoreError>),
ListMDataValues(Result<Vec<Value>, CoreError>),
GetMDataValue(Result<Value, CoreError>),
ListMDataPermissions(Result<BTreeMap<User, PermissionSet>, CoreError>),
ListMDataUserPermissions(Result<PermissionSet, CoreError>),
ListAuthKeysAndVersion(Result<(BTreeSet<sign::PublicKey>, u64), CoreError>),
GetMDataShell(Result<MutableData, CoreError>),
GetMData(Result<MutableData, CoreError>),
RateLimitExceeded,
}
#[derive(Debug)]
pub enum NetworkEvent {
Connected,
Disconnected,
}
impl Into<i32> for NetworkEvent {
fn into(self) -> i32 {
match self {
NetworkEvent::Connected => NETWORK_EVENT_START_RANGE,
NetworkEvent::Disconnected => NETWORK_EVENT_START_RANGE - 1,
}
}
}
pub type NetworkRx = mpsc::UnboundedReceiver<NetworkEvent>;
pub type NetworkTx = mpsc::UnboundedSender<NetworkEvent>;