remove some references to sled in serialization definition module

This commit is contained in:
Jane Lusby 2020-11-16 16:05:59 -08:00 committed by Deirdre Connolly
parent a122a547be
commit 5a6a9fd51e
2 changed files with 52 additions and 52 deletions

View File

@ -1,6 +1,6 @@
//! The primary implementation of the `zebra_state::Service` built upon sled
mod sled_format;
mod disk_format;
use std::{collections::HashMap, convert::TryInto, sync::Arc};
@ -13,7 +13,7 @@ use zebra_chain::{
use crate::{BoxError, Config, HashOrHeight};
use self::sled_format::{FromSled, IntoSled, SledDeserialize, SledSerialize, TransactionLocation};
use self::disk_format::{DiskDeserialize, DiskSerialize, FromDisk, IntoDisk, TransactionLocation};
use super::QueuedBlock;

View File

@ -15,24 +15,24 @@ pub struct TransactionLocation {
pub index: u32,
}
// Helper trait for defining the exact format used to interact with sled per
// Helper trait for defining the exact format used to interact with disk per
// type.
pub trait IntoSled {
pub trait IntoDisk {
// The type used to compare a value as a key to other keys stored in a
// sled::Tree
// database
type Bytes: AsRef<[u8]>;
// function to convert the current type to its sled format in `zs_get()`
// function to convert the current type to its disk format in `zs_get()`
// without necessarily allocating a new IVec
fn as_bytes(&self) -> Self::Bytes;
// function to convert the current type into its sled format
// function to convert the current type into its disk format
fn into_ivec(&self) -> sled::IVec;
}
impl<'a, T> IntoSled for &'a T
impl<'a, T> IntoDisk for &'a T
where
T: IntoSled,
T: IntoDisk,
{
type Bytes = T::Bytes;
@ -45,9 +45,9 @@ where
}
}
impl<T> IntoSled for Arc<T>
impl<T> IntoDisk for Arc<T>
where
T: IntoSled,
T: IntoDisk,
{
type Bytes = T::Bytes;
@ -60,11 +60,11 @@ where
}
}
/// Helper type for retrieving types from sled with the correct format.
/// Helper type for retrieving types from the disk with the correct format.
///
/// The ivec should be correctly encoded by IntoSled.
pub trait FromSled: Sized {
/// Function to convert the sled bytes back into the deserialized type.
/// The ivec should be correctly encoded by IntoDisk.
pub trait FromDisk: Sized {
/// Function to convert the disk bytes back into the deserialized type.
///
/// # Panics
///
@ -72,16 +72,16 @@ pub trait FromSled: Sized {
fn from_ivec(bytes: sled::IVec) -> Self;
}
impl<T> FromSled for Arc<T>
impl<T> FromDisk for Arc<T>
where
T: FromSled,
T: FromDisk,
{
fn from_ivec(bytes: sled::IVec) -> Self {
Arc::new(T::from_ivec(bytes))
}
}
impl IntoSled for Block {
impl IntoDisk for Block {
type Bytes = Vec<u8>;
fn as_bytes(&self) -> Self::Bytes {
@ -94,14 +94,14 @@ impl IntoSled for Block {
}
}
impl FromSled for Block {
impl FromDisk for Block {
fn from_ivec(bytes: sled::IVec) -> Self {
Block::zcash_deserialize(bytes.as_ref())
.expect("deserialization format should match the serialization format used by IntoSled")
}
}
impl IntoSled for TransactionLocation {
impl IntoDisk for TransactionLocation {
type Bytes = [u8; 8];
fn as_bytes(&self) -> Self::Bytes {
@ -121,7 +121,7 @@ impl IntoSled for TransactionLocation {
}
}
impl FromSled for TransactionLocation {
impl FromDisk for TransactionLocation {
fn from_ivec(sled_bytes: sled::IVec) -> Self {
let height = {
let mut bytes = [0; 4];
@ -140,7 +140,7 @@ impl FromSled for TransactionLocation {
}
}
impl IntoSled for transaction::Hash {
impl IntoDisk for transaction::Hash {
type Bytes = [u8; 32];
fn as_bytes(&self) -> Self::Bytes {
@ -152,7 +152,7 @@ impl IntoSled for transaction::Hash {
}
}
impl IntoSled for block::Hash {
impl IntoDisk for block::Hash {
type Bytes = [u8; 32];
fn as_bytes(&self) -> Self::Bytes {
@ -163,14 +163,14 @@ impl IntoSled for block::Hash {
}
}
impl FromSled for block::Hash {
impl FromDisk for block::Hash {
fn from_ivec(bytes: sled::IVec) -> Self {
let array = bytes.as_ref().try_into().unwrap();
Self(array)
}
}
impl IntoSled for sprout::Nullifier {
impl IntoDisk for sprout::Nullifier {
type Bytes = [u8; 32];
fn as_bytes(&self) -> Self::Bytes {
@ -182,7 +182,7 @@ impl IntoSled for sprout::Nullifier {
}
}
impl IntoSled for sapling::Nullifier {
impl IntoDisk for sapling::Nullifier {
type Bytes = [u8; 32];
fn as_bytes(&self) -> Self::Bytes {
@ -194,7 +194,7 @@ impl IntoSled for sapling::Nullifier {
}
}
impl IntoSled for () {
impl IntoDisk for () {
type Bytes = [u8; 0];
fn as_bytes(&self) -> Self::Bytes {
@ -206,7 +206,7 @@ impl IntoSled for () {
}
}
impl IntoSled for block::Height {
impl IntoDisk for block::Height {
type Bytes = [u8; 4];
fn as_bytes(&self) -> Self::Bytes {
@ -217,14 +217,14 @@ impl IntoSled for block::Height {
}
}
impl FromSled for block::Height {
impl FromDisk for block::Height {
fn from_ivec(bytes: sled::IVec) -> Self {
let array = bytes.as_ref().try_into().unwrap();
block::Height(u32::from_be_bytes(array))
}
}
impl IntoSled for transparent::Output {
impl IntoDisk for transparent::Output {
type Bytes = Vec<u8>;
fn as_bytes(&self) -> Self::Bytes {
@ -237,14 +237,14 @@ impl IntoSled for transparent::Output {
}
}
impl FromSled for transparent::Output {
impl FromDisk for transparent::Output {
fn from_ivec(bytes: sled::IVec) -> Self {
Self::zcash_deserialize(&*bytes)
.expect("deserialization format should match the serialization format used by IntoSled")
}
}
impl IntoSled for transparent::OutPoint {
impl IntoDisk for transparent::OutPoint {
type Bytes = Vec<u8>;
fn as_bytes(&self) -> Self::Bytes {
@ -259,7 +259,7 @@ impl IntoSled for transparent::OutPoint {
/// Helper trait for inserting (Key, Value) pairs into sled with a consistently
/// defined format
pub trait SledSerialize {
pub trait DiskSerialize {
/// Serialize and insert the given key and value into a sled tree.
fn zs_insert<K, V>(
&self,
@ -267,19 +267,19 @@ pub trait SledSerialize {
value: V,
) -> Result<(), sled::transaction::UnabortableTransactionError>
where
K: IntoSled + Debug,
V: IntoSled;
K: IntoDisk + Debug,
V: IntoDisk;
}
impl SledSerialize for sled::transaction::TransactionalTree {
impl DiskSerialize for sled::transaction::TransactionalTree {
fn zs_insert<K, V>(
&self,
key: K,
value: V,
) -> Result<(), sled::transaction::UnabortableTransactionError>
where
K: IntoSled + Debug,
V: IntoSled,
K: IntoDisk + Debug,
V: IntoDisk,
{
use std::any::type_name;
@ -301,20 +301,20 @@ impl SledSerialize for sled::transaction::TransactionalTree {
/// Helper trait for retrieving values from sled trees with a consistently
/// defined format
pub trait SledDeserialize {
pub trait DiskDeserialize {
/// Serialize the given key and use that to get and deserialize the
/// corresponding value from a sled tree, if it is present.
fn zs_get<K, V>(&self, key: &K) -> Option<V>
where
K: IntoSled,
V: FromSled;
K: IntoDisk,
V: FromDisk;
}
impl SledDeserialize for sled::Tree {
impl DiskDeserialize for sled::Tree {
fn zs_get<K, V>(&self, key: &K) -> Option<V>
where
K: IntoSled,
V: FromSled,
K: IntoDisk,
V: FromDisk,
{
let key_bytes = key.as_bytes();
@ -345,7 +345,7 @@ mod tests {
fn round_trip<T>(input: T) -> T
where
T: IntoSled + FromSled,
T: IntoDisk + FromDisk,
{
let bytes = input.into_ivec();
T::from_ivec(bytes)
@ -353,7 +353,7 @@ mod tests {
fn assert_round_trip<T>(input: T)
where
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
T: IntoDisk + FromDisk + Clone + PartialEq + std::fmt::Debug,
{
let before = input.clone();
let after = round_trip(input);
@ -362,7 +362,7 @@ mod tests {
fn round_trip_ref<T>(input: &T) -> T
where
T: IntoSled + FromSled,
T: IntoDisk + FromDisk,
{
let bytes = input.into_ivec();
T::from_ivec(bytes)
@ -370,7 +370,7 @@ mod tests {
fn assert_round_trip_ref<T>(input: &T)
where
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
T: IntoDisk + FromDisk + Clone + PartialEq + std::fmt::Debug,
{
let before = input;
let after = round_trip_ref(input);
@ -379,7 +379,7 @@ mod tests {
fn round_trip_arc<T>(input: Arc<T>) -> T
where
T: IntoSled + FromSled,
T: IntoDisk + FromDisk,
{
let bytes = input.into_ivec();
T::from_ivec(bytes)
@ -387,7 +387,7 @@ mod tests {
fn assert_round_trip_arc<T>(input: Arc<T>)
where
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
T: IntoDisk + FromDisk + Clone + PartialEq + std::fmt::Debug,
{
let before = input.clone();
let after = round_trip_arc(input);
@ -399,7 +399,7 @@ mod tests {
/// ones that implement both `IntoSled` and `FromSled`.
fn assert_value_properties<T>(input: T)
where
T: IntoSled + FromSled + Clone + PartialEq + std::fmt::Debug,
T: IntoDisk + FromDisk + Clone + PartialEq + std::fmt::Debug,
{
assert_round_trip_ref(&input);
assert_round_trip_arc(Arc::new(input.clone()));
@ -414,7 +414,7 @@ mod tests {
/// keys in the sled database, such as `contains`.
fn assert_as_bytes_matches_ivec<T>(input: T)
where
T: IntoSled + Clone,
T: IntoDisk + Clone,
{
let before = input.clone();
let ivec = input.into_ivec();