summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rkv/src/store/keys.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/rkv/src/store/keys.rs')
-rw-r--r--third_party/rust/rkv/src/store/keys.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/third_party/rust/rkv/src/store/keys.rs b/third_party/rust/rkv/src/store/keys.rs
new file mode 100644
index 0000000000..26a13db47a
--- /dev/null
+++ b/third_party/rust/rkv/src/store/keys.rs
@@ -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,
+ })
+ }
+}