summaryrefslogtreecommitdiffstats
path: root/third_party/rust/phf/README.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/phf/README.md
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/phf/README.md')
-rw-r--r--third_party/rust/phf/README.md127
1 files changed, 127 insertions, 0 deletions
diff --git a/third_party/rust/phf/README.md b/third_party/rust/phf/README.md
new file mode 100644
index 0000000000..a347377afd
--- /dev/null
+++ b/third_party/rust/phf/README.md
@@ -0,0 +1,127 @@
+# Rust-PHF
+
+[![CI](https://github.com/rust-phf/rust-phf/actions/workflows/ci.yml/badge.svg)](https://github.com/rust-phf/rust-phf/actions/workflows/ci.yml) [![Latest Version](https://img.shields.io/crates/v/phf.svg)](https://crates.io/crates/phf)
+
+[Documentation](https://docs.rs/phf)
+
+Rust-PHF is a library to generate efficient lookup tables at compile time using
+[perfect hash functions](http://en.wikipedia.org/wiki/Perfect_hash_function).
+
+It currently uses the
+[CHD algorithm](http://cmph.sourceforge.net/papers/esa09.pdf) and can generate
+a 100,000 entry map in roughly .4 seconds.
+
+MSRV (minimum supported rust version) is Rust 1.60.
+
+## Usage
+
+PHF data structures can be constructed via either the procedural
+macros in the `phf_macros` crate or code generation supported by the
+`phf_codegen` crate.
+
+To compile the `phf` crate with a dependency on
+libcore instead of libstd, enabling use in environments where libstd
+will not work, set `default-features = false` for the dependency:
+
+```toml
+[dependencies]
+# to use `phf` in `no_std` environments
+phf = { version = "0.11", default-features = false }
+```
+
+### phf_macros
+
+```rust
+use phf::phf_map;
+
+#[derive(Clone)]
+pub enum Keyword {
+ Loop,
+ Continue,
+ Break,
+ Fn,
+ Extern,
+}
+
+static KEYWORDS: phf::Map<&'static str, Keyword> = phf_map! {
+ "loop" => Keyword::Loop,
+ "continue" => Keyword::Continue,
+ "break" => Keyword::Break,
+ "fn" => Keyword::Fn,
+ "extern" => Keyword::Extern,
+};
+
+pub fn parse_keyword(keyword: &str) -> Option<Keyword> {
+ KEYWORDS.get(keyword).cloned()
+}
+```
+
+```toml
+[dependencies]
+phf = { version = "0.11", features = ["macros"] }
+```
+
+#### Note
+
+Currently, the macro syntax has some limitations and may not
+work as you want. See [#183] or [#196] for example.
+
+[#183]: https://github.com/rust-phf/rust-phf/issues/183
+[#196]: https://github.com/rust-phf/rust-phf/issues/196
+
+### phf_codegen
+
+To use `phf_codegen` on build.rs, you have to add dependencies under `[build-dependencies]`:
+
+```toml
+[build-dependencies]
+phf = { version = "0.11.1", default-features = false }
+phf_codegen = "0.11.1"
+```
+
+Then put code on build.rs:
+
+```rust
+use std::env;
+use std::fs::File;
+use std::io::{BufWriter, Write};
+use std::path::Path;
+
+fn main() {
+ let path = Path::new(&env::var("OUT_DIR").unwrap()).join("codegen.rs");
+ let mut file = BufWriter::new(File::create(&path).unwrap());
+
+ write!(
+ &mut file,
+ "static KEYWORDS: phf::Map<&'static str, Keyword> = {}",
+ phf_codegen::Map::new()
+ .entry("loop", "Keyword::Loop")
+ .entry("continue", "Keyword::Continue")
+ .entry("break", "Keyword::Break")
+ .entry("fn", "Keyword::Fn")
+ .entry("extern", "Keyword::Extern")
+ .build()
+ )
+ .unwrap();
+ write!(&mut file, ";\n").unwrap();
+}
+```
+
+and lib.rs:
+
+```rust
+#[derive(Clone)]
+enum Keyword {
+ Loop,
+ Continue,
+ Break,
+ Fn,
+ Extern,
+}
+
+include!(concat!(env!("OUT_DIR"), "/codegen.rs"));
+
+pub fn parse_keyword(keyword: &str) -> Option<Keyword> {
+ KEYWORDS.get(keyword).cloned()
+}
+```