1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
//! 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 //! (minimum supported rust version is 1.41, or 1.46 if you use the `uncased` //! feature). //! //! ```toml //! [dependencies] //! phf = { version = "0.9", 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. //! //! ## 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 #![doc(html_root_url = "https://docs.rs/phf/0.9")] #![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 /// /// ``` /// 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) [`OrderedMap`]. /// /// Requires the `macros` feature. Same usage as [`phf_map`]. #[::proc_macro_hack::proc_macro_hack] pub use phf_macros::phf_ordered_map; #[cfg(feature = "macros")] /// Macro to create a `static` (compile-time) [`Set`]. /// /// Requires the `macros` feature. /// /// # Example /// /// ``` /// 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; #[cfg(feature = "macros")] /// Macro to create a `static` (compile-time) [`OrderedSet`]. /// /// Requires the `macros` feature. Same usage as [`phf_set`]. #[proc_macro_hack::proc_macro_hack] pub use phf_macros::phf_ordered_set; #[doc(inline)] pub use self::map::Map; #[doc(inline)] pub use self::ordered_map::OrderedMap; #[doc(inline)] pub use self::ordered_set::OrderedSet; #[doc(inline)] pub use self::set::Set; pub use phf_shared::PhfHash; pub mod map; pub mod ordered_map; pub mod ordered_set; pub mod set;