Skip to content

Commit 4dbed7d

Browse files
committed
Load FST using memory-mapped file
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 2cbdbc6 commit 4dbed7d

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

Cargo.lock

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ crate-type = ["rlib"]
2323

2424
[dependencies]
2525
fst = "0.4.7"
26+
memmap2 = "0.9.9"
2627
once_cell = "1.21"
2728

2829
[[bin]]

src/lib.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
use fst::Set;
2+
use memmap2::Mmap;
23
use once_cell::sync::Lazy;
4+
use std::env;
5+
use std::fs::File;
6+
use std::path::Path;
37

4-
static FST_BYTES: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/purls.fst"));
5-
6-
static VALIDATOR: Lazy<Set<&[u8]>> =
7-
Lazy::new(|| Set::new(FST_BYTES).expect("Failed to load FST from embedded bytes"));
8+
static VALIDATOR: Lazy<Set<Mmap>> = Lazy::new(|| {
9+
let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("purls.fst");
10+
let file = File::open(path).expect("Failed to open FST file");
11+
let mmap = unsafe { Mmap::map(&file).expect("Failed to mmap FST file") };
12+
Set::new(mmap).expect("Failed to load FST from mmap")
13+
});
814

915
pub fn validate(packageurl: &str) -> bool {
1016
let trimmed_packageurl = packageurl.trim_end_matches("/");

0 commit comments

Comments
 (0)