From a3b9e560c60f8deeaecca71dc7c1c090df9b0a58 Mon Sep 17 00:00:00 2001 From: jean-airoldie <25088801+jean-airoldie@users.noreply.github.com> Date: Sun, 24 Nov 2019 05:09:52 -0500 Subject: [PATCH] Added FmtConst impl for String and Vec This allows the user to user owned types for dynamic code generation. --- phf_codegen/src/lib.rs | 53 ++++++++++++++++++++++++------------------ phf_shared/src/lib.rs | 13 +++++++++++ 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/phf_codegen/src/lib.rs b/phf_codegen/src/lib.rs index 2f3c428a..c6bbb7d3 100644 --- a/phf_codegen/src/lib.rs +++ b/phf_codegen/src/lib.rs @@ -133,7 +133,7 @@ //! ``` #![doc(html_root_url = "https://docs.rs/phf_codegen/0.7")] -use phf_shared::{PhfHash, FmtConst}; +use phf_shared::{FmtConst, PhfHash}; use std::collections::HashSet; use std::fmt; use std::hash::Hash; @@ -221,45 +221,54 @@ pub struct DisplayMap<'a, K> { state: HashState, keys: &'a [K], values: &'a [String], - } impl<'a, K: FmtConst + 'a> fmt::Display for DisplayMap<'a, K> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { // funky formatting here for nice output - write!(f, - "{}::Map {{ + write!( + f, + "{}::Map {{ key: {:?}, disps: {}::Slice::Static(&[", - self.path, self.state.key, self.path)?; + self.path, self.state.key, self.path + )?; // write map displacements for &(d1, d2) in &self.state.disps { - write!(f, - " + write!( + f, + " ({}, {}),", - d1, - d2)?; + d1, d2 + )?; } - write!(f, - " + write!( + f, + " ]), - entries: {}::Slice::Static(&[", self.path)?; + entries: {}::Slice::Static(&[", + self.path + )?; // write map entries for &idx in &self.state.map { - write!(f, - " + write!( + f, + " ({}, {}),", - Delegate(&self.keys[idx]), - &self.values[idx])?; + Delegate(&self.keys[idx]), + &self.values[idx] + )?; } - write!(f, - " + write!( + f, + " ]), -}}") +}}" + ) } } @@ -271,9 +280,7 @@ pub struct Set { impl Set { /// Constructs a new `phf::Set` builder. pub fn new() -> Set { - Set { - map: Map::new(), - } + Set { map: Map::new() } } /// Set the path to the `phf` crate from the global namespace @@ -296,7 +303,7 @@ impl Set { /// Panics if there are any duplicate keys. pub fn build(&self) -> DisplaySet { DisplaySet { - inner: self.map.build() + inner: self.map.build(), } } } diff --git a/phf_shared/src/lib.rs b/phf_shared/src/lib.rs index 7e1efdcb..e063f2a0 100644 --- a/phf_shared/src/lib.rs +++ b/phf_shared/src/lib.rs @@ -111,6 +111,19 @@ delegate_debug!(u128); delegate_debug!(i128); delegate_debug!(bool); +delegate_debug!(String); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); +delegate_debug!(Vec); + #[cfg(feature = "std")] impl PhfHash for String { #[inline]