From 6d06c25fac2bb7c3adf40af17b6e908413a2e24f Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Mon, 16 May 2022 17:20:08 -0400 Subject: [PATCH] further refactoring --- src/lib.rs | 1 + src/main.rs | 1 + src/math_app.rs | 4 ++-- src/misc.rs | 28 +++++----------------------- tests/misc.rs | 3 +-- 5 files changed, 10 insertions(+), 27 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2c003ed..bf5c700 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,7 @@ #![feature(const_assume)] #![feature(const_option_ext)] #![feature(const_slice_index)] +#![feature(split_array)] #[macro_use] extern crate static_assertions; diff --git a/src/main.rs b/src/main.rs index e28b930..9e13e88 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ #![feature(const_assume)] #![feature(const_option_ext)] #![feature(const_slice_index)] +#![feature(split_array)] #[macro_use] extern crate static_assertions; diff --git a/src/math_app.rs b/src/math_app.rs index 797433f..d92b3ed 100644 --- a/src/math_app.rs +++ b/src/math_app.rs @@ -150,7 +150,7 @@ impl MathApp { return None; } - let (commit, cached_data) = crate::misc::hashed_storage_read(data); + let (commit, cached_data) = crate::misc::hashed_storage_read(data)?; debug_assert!(!commit.is_empty()); debug_assert!(!cached_data.is_empty()); @@ -188,7 +188,7 @@ impl MathApp { return None; } - let (commit, func_data) = crate::misc::hashed_storage_read(data); + let (commit, func_data) = crate::misc::hashed_storage_read(data)?; debug_assert!(!commit.is_empty()); debug_assert!(!func_data.is_empty()); diff --git a/src/misc.rs b/src/misc.rs index 9003d29..3d2695a 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -312,12 +312,6 @@ pub const HASH_LENGTH: usize = 8; #[allow(dead_code)] pub fn hashed_storage_create(hash: [u8; HASH_LENGTH], data: &[u8]) -> String { - debug_assert!(!data.is_empty()); - - unsafe { - assume(!data.is_empty()); - } - // cannot use `from_utf8` seems to break on wasm. no clue why [&hash, data] .concat() @@ -327,28 +321,16 @@ pub fn hashed_storage_create(hash: [u8; HASH_LENGTH], data: &[u8]) -> String { } #[allow(dead_code)] -pub fn hashed_storage_read(data: String) -> ([u8; HASH_LENGTH], Vec) { - debug_assert!(data.len() > HASH_LENGTH); - unsafe { - assume(!data.is_empty()); - assume(data.len() > HASH_LENGTH); +pub fn hashed_storage_read(data: String) -> Option<([u8; HASH_LENGTH], Vec)> { + if HASH_LENGTH >= data.len() { + return None; } // can't use data.as_bytes() here for some reason, seems to break on wasm? let decoded_1 = data.chars().map(|c| c as u8).collect::>(); - let (hash, cached_data) = decoded_1.split_at(8); - debug_assert_eq!(hash.len(), HASH_LENGTH); + let (hash, cached_data) = decoded_1.split_array_ref::(); debug_assert!(!cached_data.is_empty()); - unsafe { - assume(!cached_data.is_empty()); - assume(!hash.is_empty()); - assume(hash.len() == HASH_LENGTH); - } - - ( - unsafe { hash.try_into().unwrap_unchecked() }, - cached_data.to_vec(), - ) + Some((*hash, cached_data.to_vec())) } diff --git a/tests/misc.rs b/tests/misc.rs index 255c96e..be9452d 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -106,6 +106,5 @@ fn hashed_storage() { ); let read = hashed_storage_read(storage); - assert_eq!(read.0.to_vec(), commit); - assert_eq!(read.1, data); + assert_eq!(read.map(|(a, b)| (a.to_vec(), b)), Some((commit, data))); }