From 1ae98055d0c5226ce535318b81f32b95da8b7448 Mon Sep 17 00:00:00 2001 From: jjy Date: Fri, 17 Jan 2020 17:05:58 +0800 Subject: [PATCH] refactor: remove failure and f64 for no_std --- Cargo.toml | 1 - src/error.rs | 24 +++++++++++++++++++----- src/helper.rs | 11 ++++++++++- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 949c382..34dbfbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ default = ["std"] std = [] [dependencies] -failure = "0.1.5" cfg-if = "0.1" [dev-dependencies] diff --git a/src/error.rs b/src/error.rs index 108830c..4e246b8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,12 +1,26 @@ -pub use failure::Fail; pub type Result = core::result::Result; -#[derive(Fail, Debug, PartialEq, Eq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum Error { - #[fail(display = "Get root on an empty MMR")] GetRootOnEmpty, - #[fail(display = "Inconsistent store")] InconsistentStore, - #[fail(display = "Store error {}", _0)] StoreError(crate::string::String), } + +impl core::fmt::Display for Error { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + use Error::*; + match self { + GetRootOnEmpty => write!(f, "Get root on an empty MMR")?, + InconsistentStore => write!(f, "Inconsistent store")?, + StoreError(msg) => write!(f, "Store error {}", msg)?, + } + Ok(()) + } +} + +cfg_if::cfg_if! { + if #[cfg(feature = "std")] { + impl ::std::error::Error for Error {} + } +} diff --git a/src/helper.rs b/src/helper.rs index fe623cb..f90d17b 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -1,5 +1,14 @@ use crate::vec::Vec; +fn log2(mut n: u64) -> u64 { + let mut k = 0; + while n > 1 { + k += 1; + n >>= 1; + } + k +} + pub fn leaf_index_to_pos(index: u64) -> u64 { if index == 0 { return 0; @@ -10,7 +19,7 @@ pub fn leaf_index_to_pos(index: u64) -> u64 { let mut height = 0u32; while leaves > 1 { // get heighest peak height - height = (leaves as f64).log2() as u32; + height = log2(leaves) as u32; // calculate leaves in peak let peak_leaves = 1 << height; // heighest positon