mirror of https://github.com/nextgraph-org/rkv.git
Signed-off-by: Victor Porof <victor.porof@gmail.com>without.crypto
parent
11ac25cf2f
commit
8b51df1952
@ -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…
Reference in new issue