#[derive(Clone, Debug, Default, PartialEq, Eq)]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Serialize, serde_derive::Deserialize)
)]
#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
pub struct GasCostSummary {
pub computation_cost: u64,
pub storage_cost: u64,
pub storage_rebate: u64,
pub non_refundable_storage_fee: u64,
}
impl GasCostSummary {
pub fn new(
computation_cost: u64,
storage_cost: u64,
storage_rebate: u64,
non_refundable_storage_fee: u64,
) -> GasCostSummary {
GasCostSummary {
computation_cost,
storage_cost,
storage_rebate,
non_refundable_storage_fee,
}
}
pub fn gas_used(&self) -> u64 {
self.computation_cost + self.storage_cost
}
pub fn net_gas_usage(&self) -> i64 {
self.gas_used() as i64 - self.storage_rebate as i64
}
}
impl std::fmt::Display for GasCostSummary {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "computation_cost: {}, ", self.computation_cost)?;
write!(f, "storage_cost: {}, ", self.storage_cost)?;
write!(f, "storage_rebate: {}, ", self.storage_rebate)?;
write!(
f,
"non_refundable_storage_fee: {}",
self.non_refundable_storage_fee
)
}
}
#[cfg(test)]
mod test {
use super::*;
#[cfg(target_arch = "wasm32")]
use wasm_bindgen_test::wasm_bindgen_test as test;
#[test]
#[cfg(feature = "serde")]
fn formats() {
let actual = GasCostSummary {
computation_cost: 42,
storage_cost: u64::MAX,
storage_rebate: 0,
non_refundable_storage_fee: 9,
};
println!("{}", serde_json::to_string(&actual).unwrap());
println!("{:?}", bcs::to_bytes(&actual).unwrap());
}
}