use crate::rpc::network::NetworkRpc;
use anyhow::Result;
use serde_json::{Value, json};
pub async fn get_network_info(network: &NetworkRpc) -> Result<Value> {
let info = network.get_network_info().await?;
Ok(info)
}
pub async fn get_network_peers(network: &NetworkRpc) -> Result<Value> {
let peers = network.get_peer_info().await?;
Ok(peers)
}
pub async fn get_connection_count(network: &NetworkRpc) -> Result<Value> {
let params = json!([]);
let count = network.get_connection_count(¶ms).await?;
Ok(count)
}
pub async fn get_net_totals(network: &NetworkRpc) -> Result<Value> {
let params = json!([]);
let totals = network.get_net_totals(¶ms).await?;
Ok(totals)
}
pub async fn get_added_node_info(
network: &NetworkRpc,
node: Option<&str>,
dns: bool,
) -> Result<Value> {
let params = if let Some(n) = node {
json!([n, dns])
} else {
json!([])
};
let info = network.getaddednodeinfo(¶ms).await?;
Ok(info)
}
pub async fn get_node_addresses(network: &NetworkRpc, count: Option<u32>) -> Result<Value> {
let params = if let Some(c) = count {
json!([c])
} else {
json!([])
};
let addresses = network.getnodeaddresses(¶ms).await?;
Ok(addresses)
}
pub async fn list_banned(network: &NetworkRpc) -> Result<Value> {
let params = json!([]);
let banned = network.list_banned(¶ms).await?;
Ok(banned)
}
pub async fn ping_network(network: &NetworkRpc) -> Result<Value> {
let params = json!([]);
let result = network.ping(¶ms).await?;
Ok(result)
}
pub async fn add_node(network: &NetworkRpc, address: &str, command: &str) -> Result<Value> {
let params = json!([address, command]);
let result = network.add_node(¶ms).await?;
Ok(result)
}
pub async fn disconnect_node(network: &NetworkRpc, address: &str) -> Result<Value> {
let params = json!([address]);
let result = network.disconnect_node(¶ms).await?;
Ok(result)
}
pub async fn set_network_active(network: &NetworkRpc, state: bool) -> Result<Value> {
let params = json!([state]);
let result = network.setnetworkactive(¶ms).await?;
Ok(result)
}
pub async fn set_network_active_body(network: &NetworkRpc, body: &Value) -> Result<Value> {
match body.get("state").and_then(|v| v.as_bool()) {
Some(state) => set_network_active(network, state).await,
None => {
let info = network.get_network_info().await?;
Ok(json!(info["networkactive"]))
}
}
}
pub async fn set_ban(
network: &NetworkRpc,
subnet: &str,
command: &str,
bantime: Option<u64>,
absolute: Option<bool>,
) -> Result<Value> {
if absolute.is_some() && bantime.is_none() {
anyhow::bail!("setban: absolute requires bantime");
}
let mut params = json!([subnet, command]);
if let Some(bt) = bantime {
params.as_array_mut().unwrap().push(json!(bt));
}
if let Some(abs) = absolute {
params.as_array_mut().unwrap().push(json!(abs));
}
let result = network.set_ban(¶ms).await?;
Ok(result)
}
pub async fn clear_banned(network: &NetworkRpc) -> Result<Value> {
let params = json!([]);
let result = network.clear_banned(¶ms).await?;
Ok(result)
}