Pre: split key types into separate module

Signed-off-by: Victor Porof <victor.porof@gmail.com>
without.crypto
Victor Porof 5 years ago
parent 11ac25cf2f
commit 8b51df1952
  1. 6
      src/env.rs
  2. 6
      src/lib.rs
  3. 1
      src/store.rs
  4. 57
      src/store/integer.rs
  5. 2
      src/store/integermulti.rs
  6. 46
      src/store/keys.rs
  7. 27
      src/store/keys/encodables.rs
  8. 15
      src/store/keys/primitives.rs

@ -32,10 +32,8 @@ use crate::readwrite::{
Reader,
Writer,
};
use crate::store::integer::{
IntegerStore,
PrimitiveInt,
};
use crate::store::integer::IntegerStore;
use crate::store::keys::PrimitiveInt;
use crate::store::integermulti::MultiIntegerStore;
use crate::store::multi::MultiStore;

@ -228,11 +228,9 @@ pub use self::readwrite::{
Reader,
Writer,
};
pub use self::store::integer::{
IntegerStore,
PrimitiveInt,
};
pub use self::store::integer::IntegerStore;
pub use self::store::integermulti::MultiIntegerStore;
pub use self::store::keys::PrimitiveInt;
pub use self::store::multi::MultiStore;
pub use self::store::single::SingleStore;
pub use self::store::Options as StoreOptions;

@ -2,6 +2,7 @@ pub mod integer;
pub mod integermulti;
pub mod multi;
pub mod single;
pub mod keys;
use lmdb::DatabaseFlags;

@ -10,16 +10,9 @@
use std::marker::PhantomData;
use bincode::serialize;
use serde::Serialize;
use lmdb::Database;
use crate::error::{
DataError,
StoreError,
};
use crate::error::StoreError;
use crate::readwrite::{
Readable,
@ -30,50 +23,10 @@ use crate::value::Value;
use crate::store::single::SingleStore;
pub trait EncodableKey {
fn to_bytes(&self) -> Result<Vec<u8>, DataError>;
}
pub trait PrimitiveInt: EncodableKey {}
impl PrimitiveInt for u32 {}
impl<T> EncodableKey for T
where
T: Serialize,
{
fn to_bytes(&self) -> Result<Vec<u8>, DataError> {
serialize(self) // TODO: limited key length.
.map_err(Into::into)
}
}
pub(crate) struct Key<K> {
bytes: Vec<u8>,
phantom: PhantomData<K>,
}
impl<K> AsRef<[u8]> for Key<K>
where
K: EncodableKey,
{
fn as_ref(&self) -> &[u8] {
self.bytes.as_ref()
}
}
impl<K> Key<K>
where
K: EncodableKey,
{
#[allow(clippy::new_ret_no_self)]
pub(crate) fn new(k: &K) -> Result<Key<K>, DataError> {
Ok(Key {
bytes: k.to_bytes()?,
phantom: PhantomData,
})
}
}
use crate::store::keys::{
Key,
PrimitiveInt,
};
pub struct IntegerStore<K>
where

@ -29,7 +29,7 @@ use crate::store::multi::{
MultiStore,
};
use crate::store::integer::{
use crate::store::keys::{
Key,
PrimitiveInt,
};

@ -0,0 +1,46 @@
// Copyright 2018-2019 Mozilla
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
// this file except in compliance with the License. You may obtain a copy of the
// License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software distributed
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
mod encodables;
mod primitives;
use std::marker::PhantomData;
use crate::error::DataError;
pub use encodables::*;
pub use primitives::*;
pub(crate) struct Key<K> {
bytes: Vec<u8>,
phantom: PhantomData<K>,
}
impl<K> AsRef<[u8]> for Key<K>
where
K: EncodableKey,
{
fn as_ref(&self) -> &[u8] {
self.bytes.as_ref()
}
}
impl<K> Key<K>
where
K: EncodableKey,
{
#[allow(clippy::new_ret_no_self)]
pub fn new(k: &K) -> Result<Key<K>, DataError> {
Ok(Key {
bytes: k.to_bytes()?,
phantom: PhantomData,
})
}
}

@ -0,0 +1,27 @@
// Copyright 2018-2019 Mozilla
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
// this file except in compliance with the License. You may obtain a copy of the
// License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software distributed
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
use bincode::serialize;
use serde::Serialize;
use crate::error::DataError;
pub trait EncodableKey {
fn to_bytes(&self) -> Result<Vec<u8>, DataError>;
}
impl<T> EncodableKey for T
where
T: Serialize,
{
fn to_bytes(&self) -> Result<Vec<u8>, DataError> {
serialize(self).map_err(|e| e.into())
}
}

@ -0,0 +1,15 @@
// Copyright 2018-2019 Mozilla
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
// this file except in compliance with the License. You may obtain a copy of the
// License at http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software distributed
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
use crate::store::keys::EncodableKey;
pub trait PrimitiveInt: EncodableKey {}
impl PrimitiveInt for u32 {}
Loading…
Cancel
Save