use celestia_proto::cosmos::base::node::v1beta1::{
ConfigRequest, ConfigResponse as RawConfigResponse,
};
use celestia_types::state::BOND_DENOM;
use serde::{Deserialize, Serialize};
#[cfg(all(target_arch = "wasm32", feature = "wasm-bindgen"))]
use wasm_bindgen::prelude::*;
use crate::grpc::{make_empty_params, FromGrpcResponse};
use crate::{Error, Result};
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
#[cfg_attr(all(target_arch = "wasm32", feature = "wasm-bindgen"), wasm_bindgen)]
pub struct ConfigResponse {
pub minimum_gas_price: Option<f64>,
pub pruning_keep_recent: u64,
pub pruning_interval: u64,
pub halt_height: u64,
}
impl FromGrpcResponse<ConfigResponse> for RawConfigResponse {
fn try_from_response(self) -> Result<ConfigResponse> {
let minimum_gas_price = if self.minimum_gas_price.is_empty() {
None
} else {
Some(
self.minimum_gas_price
.strip_suffix(BOND_DENOM)
.ok_or(Error::FailedToParseResponse)?
.parse()
.map_err(|_| Error::FailedToParseResponse)?,
)
};
Ok(ConfigResponse {
minimum_gas_price,
pruning_keep_recent: self
.pruning_keep_recent
.parse()
.map_err(|_| Error::FailedToParseResponse)?,
pruning_interval: self
.pruning_interval
.parse()
.map_err(|_| Error::FailedToParseResponse)?,
halt_height: self.halt_height,
})
}
}
make_empty_params!(ConfigRequest);