Skip to content

Commit 5ee43f8

Browse files
committed
feat: bump edition to 2024 and update dependencies
1 parent b76c006 commit 5ee43f8

File tree

4 files changed

+47
-47
lines changed

4 files changed

+47
-47
lines changed

Cargo.toml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,32 @@
22
authors = ["BarbossHack <barbossh4ck@protonmail.com>"]
33
categories = ["database-implementations", "concurrency", "data-structures", "caching"]
44
description = "A key-value store based on linux shared-memory files (shm) for persisting state across program restarts."
5-
edition = "2021"
5+
edition = "2024"
66
homepage = "https://github.com/BarbossHack/shmap"
77
keywords = ["shm", "shared-memory", "inter-process", "store", "ramfs"]
88
license = "MIT OR Apache-2.0"
99
name = "shmap"
1010
readme = "README.md"
1111
repository = "https://github.com/BarbossHack/shmap"
12+
rust-version = "1.85.0"
1213
version = "0.4.7"
1314

1415
[dependencies]
15-
aes-gcm = { version = "0.10", features = ["std"] }
16+
aes-gcm = { version = "0.10.3", features = ["std"] }
1617
bincode = { version = "=2.0.0-rc.3", default-features = false, features = ["std", "serde"] }
17-
chrono = { version = "0.4", features = ["serde"] }
18-
fdlimit = "0.3"
19-
libc = "0.2"
20-
log = "0.4"
21-
memmap2 = "0.9"
22-
named-lock = "0.4"
23-
rand = "0.8"
24-
serde = { version = "1.0", features = ["serde_derive"] }
25-
sha2 = "0.10"
26-
thiserror = "1.0"
18+
chrono = { version = "0.4.40", features = ["serde"] }
19+
fdlimit = "0.3.0"
20+
libc = "0.2.170"
21+
log = "0.4.26"
22+
memmap2 = "0.9.5"
23+
named-lock = "0.4.1"
24+
rand = "0.9.0"
25+
serde = { version = "1.0.218", features = ["serde_derive"] }
26+
sha2 = "0.10.8"
27+
thiserror = "2.0.12"
2728

2829
[dev-dependencies]
29-
env_logger = "0.11"
30+
env_logger = "0.11.6"
3031

3132
[lints.clippy]
3233
missing_errors_doc = "allow"

src/errors.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use thiserror::Error;
2-
3-
#[derive(Debug, Error)]
1+
#[derive(thiserror::Error, Debug)]
42
pub enum ShmapError {
53
#[error("shm file not found")]
64
ShmFileNotFound,

src/map.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ use crate::{
44
shm::{self, SHM_DIR},
55
};
66
use aes_gcm::{
7-
aead::{generic_array::GenericArray, Aead},
87
Aes256Gcm, KeyInit, Nonce,
8+
aead::{Aead, generic_array::GenericArray},
99
};
1010
use chrono::Utc;
1111
use log::{error, warn};
1212
use memmap2::{Mmap, MmapMut};
1313
use named_lock::NamedLock;
14-
use rand::{seq::SliceRandom, thread_rng};
15-
use serde::{de::DeserializeOwned, Serialize};
14+
use rand::seq::SliceRandom;
15+
use serde::{Serialize, de::DeserializeOwned};
1616
use sha2::{Digest, Sha224};
1717
use std::{
1818
fs,
@@ -76,7 +76,7 @@ impl Shmap {
7676

7777
// Remove item if expired
7878
let not_found = match self.get_metadata(key)? {
79-
Some(metadata) => metadata.expiration.map_or(false, |expiration| {
79+
Some(metadata) => metadata.expiration.is_some_and(|expiration| {
8080
let expired = Utc::now().gt(&expiration);
8181
if expired {
8282
warn!("Key <{}> expired, removing", &key);
@@ -102,7 +102,7 @@ impl Shmap {
102102
where
103103
T: DeserializeOwned,
104104
{
105-
match self._get(sanitized_key)? {
105+
match self.get_internal(sanitized_key)? {
106106
Some(bytes) => {
107107
let (value, _): (T, usize) =
108108
bincode::serde::decode_from_slice(&bytes, bincode::config::standard())?;
@@ -115,10 +115,10 @@ impl Shmap {
115115
/// Get an item by its key, without deserialization, as bytes.
116116
pub fn get_raw(&self, key: &str) -> Result<Option<Vec<u8>>, ShmapError> {
117117
let sanitized_key = sanitize_key(key);
118-
self._get(&sanitized_key)
118+
self.get_internal(&sanitized_key)
119119
}
120120

121-
fn _get(&self, sanitized_key: &str) -> Result<Option<Vec<u8>>, ShmapError> {
121+
fn get_internal(&self, sanitized_key: &str) -> Result<Option<Vec<u8>>, ShmapError> {
122122
let lock = NamedLock::with_path(
123123
PathBuf::from(SHM_DIR).join(
124124
sanitized_key
@@ -148,7 +148,7 @@ impl Shmap {
148148
// If the value is empty, remove it and return None
149149
error!("mmap file for item <{}> is empty, removing", sanitized_key);
150150
drop(guard);
151-
let _ = self._remove(sanitized_key);
151+
let _ = self.remove_internal(sanitized_key);
152152
return Ok(None);
153153
}
154154

@@ -199,7 +199,7 @@ impl Shmap {
199199
ttl: Duration,
200200
) -> Result<(), ShmapError> {
201201
let sanitized_key = sanitize_key(key);
202-
self._insert(&sanitized_key, value)?;
202+
self.insert_internal(&sanitized_key, value)?;
203203
self.insert_metadata(Metadata::new(key, Some(ttl), self.cipher.is_some())?)
204204
}
205205

@@ -213,21 +213,21 @@ impl Shmap {
213213
T: Serialize,
214214
{
215215
let bytes = bincode::serde::encode_to_vec(&value, bincode::config::standard())?;
216-
self._insert(sanitized_key, &bytes)
216+
self.insert_internal(sanitized_key, &bytes)
217217
}
218218

219219
/// Insert a new item, without serialization.
220220
pub fn insert_raw(&self, key: &str, value: &[u8]) -> Result<(), ShmapError> {
221221
let sanitized_key = sanitize_key(key);
222-
self._insert(&sanitized_key, value)
222+
self.insert_internal(&sanitized_key, value)
223223
}
224224

225-
fn _insert(&self, sanitized_key: &str, value: &[u8]) -> Result<(), ShmapError> {
225+
fn insert_internal(&self, sanitized_key: &str, value: &[u8]) -> Result<(), ShmapError> {
226226
// If an encryption key was provided, encrypt the value
227227
let bytes = if let Some(cipher) = &self.cipher {
228-
let mut nonce: Vec<u8> = (0..12).collect();
229-
nonce.shuffle(&mut thread_rng());
230-
let mut ciphertext = cipher.encrypt(Nonce::from_slice(nonce.as_slice()), value)?;
228+
let mut nonce: Vec<u8> = vec![0; 12];
229+
nonce.shuffle(&mut rand::rng());
230+
let mut ciphertext = cipher.encrypt(Nonce::from_slice(&nonce), value)?;
231231
nonce.append(&mut ciphertext);
232232
nonce
233233
} else {
@@ -258,7 +258,7 @@ impl Shmap {
258258
Ok(()) => Ok(()),
259259
Err(e) => {
260260
drop(guard);
261-
let _ = self._remove(sanitized_key);
261+
let _ = self.remove_internal(sanitized_key);
262262
Err(e)
263263
}
264264
}
@@ -267,17 +267,17 @@ impl Shmap {
267267
/// Remove an item by its key.
268268
pub fn remove(&self, key: &str) -> Result<(), ShmapError> {
269269
let sanitized_key = sanitize_key(key);
270-
self._remove(&sanitized_key)?;
270+
self.remove_internal(&sanitized_key)?;
271271
self.remove_metadata(key)
272272
}
273273

274274
fn remove_metadata(&self, key: &str) -> Result<(), ShmapError> {
275275
let sanitize_metadata_key = sanitize_metadata_key(key);
276-
self._remove(&sanitize_metadata_key)
276+
self.remove_internal(&sanitize_metadata_key)
277277
}
278278

279279
#[allow(clippy::unused_self)]
280-
fn _remove(&self, sanitized_key: &str) -> Result<(), ShmapError> {
280+
fn remove_internal(&self, sanitized_key: &str) -> Result<(), ShmapError> {
281281
if !sanitized_key.ends_with(LOCK_SUFFIX) {
282282
let lock = NamedLock::with_path(
283283
PathBuf::from(SHM_DIR).join(
@@ -327,8 +327,8 @@ impl Shmap {
327327
if Utc::now().gt(&expiration) {
328328
// Expired, remove item and metadata
329329
warn!("[clean] Item <{}> expired, removing", &filename);
330-
let _ = self._remove(&filename);
331-
let _ = self._remove(&metadata_filename);
330+
let _ = self.remove_internal(&filename);
331+
let _ = self.remove_internal(&metadata_filename);
332332
} else {
333333
// Not expired, add to list
334334
keys.push(metadata.key);
@@ -343,7 +343,7 @@ impl Shmap {
343343
if duration_since_modified_time > Duration::from_secs(5) {
344344
// Item exists, but metadata not found, remove item
345345
warn!("[clean] Item <{}> metadata not found, removing", &filename);
346-
let _ = self._remove(&filename);
346+
let _ = self.remove_internal(&filename);
347347
}
348348
}
349349
Err(e) => {
@@ -364,7 +364,7 @@ impl Shmap {
364364
"[clean] Metadata <{}> exists, but item not found, removing metadata",
365365
&filename
366366
);
367-
let _ = self._remove(&filename);
367+
let _ = self.remove_internal(&filename);
368368
}
369369
} else if filename.starts_with(SHMAP_PREFIX) && filename.ends_with(LOCK_SUFFIX) {
370370
let filename_path = dir_entry.path().to_string_lossy().to_string();
@@ -377,7 +377,7 @@ impl Shmap {
377377
"[clean] Lock <{}> exists, but item not found, removing",
378378
&filename
379379
);
380-
let _ = self._remove(&filename);
380+
let _ = self.remove_internal(&filename);
381381
}
382382
}
383383
}
@@ -398,8 +398,8 @@ fn sanitize_metadata_key(key: &str) -> String {
398398
#[cfg(test)]
399399
mod tests {
400400
use crate::{
401-
tests::map::{init_logger, rand_string},
402401
Shmap,
402+
tests::map::{init_logger, rand_string},
403403
};
404404

405405
#[test]

src/tests/map.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use crate::shm;
2-
use crate::{map::sanitize_key, Shmap};
2+
use crate::{Shmap, map::sanitize_key};
33
use log::LevelFilter;
44
use memmap2::Mmap;
5-
use rand::{distributions::Alphanumeric, prelude::SliceRandom, thread_rng, Rng};
5+
use rand::distr::Alphanumeric;
6+
use rand::{Rng, prelude::SliceRandom};
67
use std::io::Write;
78
use std::{collections::HashSet, str::FromStr, time::Duration};
89

@@ -28,7 +29,7 @@ pub fn init_logger() {
2829
}
2930

3031
pub fn rand_string(len: usize) -> String {
31-
rand::thread_rng()
32+
rand::rng()
3233
.sample_iter(&Alphanumeric)
3334
.take(len)
3435
.map(char::from)
@@ -98,7 +99,7 @@ fn test_encrypted() {
9899
init_logger();
99100

100101
let mut secret: Vec<u8> = (0..32).collect();
101-
secret.shuffle(&mut thread_rng());
102+
secret.shuffle(&mut rand::rng());
102103

103104
let shmap_enc = Shmap::new_with_encryption(&secret.try_into().unwrap());
104105
let key = rand_string(33);
@@ -131,14 +132,14 @@ fn test_bad_key() {
131132
let value = rand_string(50);
132133

133134
let mut secret: Vec<u8> = (0..32).collect();
134-
secret.shuffle(&mut thread_rng());
135+
secret.shuffle(&mut rand::rng());
135136
let shmap = Shmap::new_with_encryption(&secret.try_into().unwrap());
136137
shmap.insert(&key, value.clone()).unwrap();
137138
let ret_value: String = shmap.get(&key).unwrap().unwrap();
138139
assert_eq!(ret_value, value);
139140

140141
let mut secret: Vec<u8> = (0..32).collect();
141-
secret.shuffle(&mut thread_rng());
142+
secret.shuffle(&mut rand::rng());
142143
let shmap = Shmap::new_with_encryption(&secret.try_into().unwrap());
143144
assert!(
144145
shmap.get::<String>(&key).is_err(),

0 commit comments

Comments
 (0)