summaryrefslogtreecommitdiffstats
path: root/third_party/rust/phf/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/phf/src/lib.rs')
-rw-r--r--third_party/rust/phf/src/lib.rs124
1 files changed, 124 insertions, 0 deletions
diff --git a/third_party/rust/phf/src/lib.rs b/third_party/rust/phf/src/lib.rs
new file mode 100644
index 0000000000..b5b587d445
--- /dev/null
+++ b/third_party/rust/phf/src/lib.rs
@@ -0,0 +1,124 @@
+//! Compile-time generated maps and sets.
+//!
+//! The `phf::Map` and `phf::Set` types have roughly comparable performance to
+//! a standard hash table, but can be generated as compile-time static values.
+//!
+//! # Usage
+//!
+//! If the `macros` Cargo feature is enabled, the `phf_map`, `phf_set`,
+//! `phf_ordered_map`, and `phf_ordered_set` macros can be used to construct
+//! the PHF type. This method can be used with a stable compiler
+//! (`rustc` version 1.30+)
+//!
+//! ```toml
+//! [dependencies]
+//! phf = { version = "0.7.24", features = ["macros"] }
+//! ```
+//!
+//! ```
+//! use phf::{phf_map, phf_set};
+//!
+//! static MY_MAP: phf::Map<&'static str, u32> = phf_map! {
+//! "hello" => 1,
+//! "world" => 2,
+//! };
+//!
+//! static MY_SET: phf::Set<&'static str> = phf_set! {
+//! "hello world",
+//! "hola mundo",
+//! };
+//!
+//! fn main() {
+//! assert_eq!(MY_MAP["hello"], 1);
+//! assert!(MY_SET.contains("hello world"));
+//! }
+//! ```
+//!
+//! (Alternatively, you can use the phf_codegen crate to generate PHF datatypes
+//! in a build script)
+#![doc(html_root_url="https://docs.rs/phf/0.7")]
+#![warn(missing_docs)]
+#![cfg_attr(not(feature = "std"), no_std)]
+
+#[cfg(feature = "std")]
+extern crate std as core;
+
+#[cfg(feature = "macros")]
+/// Macro to create a `static` (compile-time) [`Map`].
+///
+/// Requires the `"macros"` feature.
+///
+/// # Example
+///
+/// ```rust,edition2018
+/// use ::phf::{phf_map, Map};
+///
+/// static MY_MAP: Map<&'static str, u32> = phf_map! {
+/// "hello" => 1,
+/// "world" => 2,
+/// };
+///
+/// fn main ()
+/// {
+/// assert_eq!(MY_MAP["hello"], 1);
+/// }
+/// ```
+#[::proc_macro_hack::proc_macro_hack]
+pub use phf_macros:: phf_map;
+
+#[cfg(feature = "macros")]
+/// Macro to create a `static` (compile-time) [`Set`].
+///
+/// Requires the `"macros"` feature.
+///
+/// # Example
+///
+/// ```rust,edition2018
+/// use ::phf::{phf_set, Set};
+///
+/// static MY_SET: Set<&'static str> = phf_set! {
+/// "hello world",
+/// "hola mundo",
+/// };
+///
+/// fn main ()
+/// {
+/// assert!(MY_SET.contains("hello world"));
+/// }
+/// ```
+#[::proc_macro_hack::proc_macro_hack]
+pub use phf_macros::phf_set;
+
+use core::ops::Deref;
+
+pub use phf_shared::PhfHash;
+#[doc(inline)]
+pub use self::map::Map;
+#[doc(inline)]
+pub use self::set::Set;
+
+pub mod map;
+pub mod set;
+
+// WARNING: this is not considered part of phf's public API and is subject to
+// change at any time.
+//
+// Basically Cow, but with the Owned version conditionally compiled
+#[doc(hidden)]
+pub enum Slice<T: 'static> {
+ Static(&'static [T]),
+ #[cfg(feature = "std")]
+ Dynamic(Vec<T>),
+}
+
+impl<T> Deref for Slice<T> {
+ type Target = [T];
+
+ fn deref(&self) -> &[T] {
+ match *self {
+ Slice::Static(t) => t,
+ #[cfg(feature = "std")]
+ Slice::Dynamic(ref t) => t,
+ }
+ }
+}