[−][src]Enum serde_hashkey::Key
The central key type, which is an in-memory representation of all supported serde-serialized values.
This can be serialized to a type implementing serde::Deserialize using from_key, and deserialized from a type implementing serde::Serialize using to_key. See the corresponding function for documentation.
The type parameter F
corresponds to the FloatPolicy in used. It defaults
to RejectFloatPolicy which will cause floats to be rejected.
Examples
use serde_derive::{Deserialize, Serialize}; use serde_hashkey::{to_key, to_key_with_ordered_float}; #[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] struct Author { name: String, age: u32, } let key = to_key(&Author { name: String::from("Jane Doe"), age: 42, })?; // Note: serializing floats will fail under the default policy, but succeed // under one supporting floats. assert!(to_key(&42.0f32).is_err()); assert!(to_key_with_ordered_float(&42.0f32).is_ok());
Variants
A unit value.
Bool(bool)
A boolean value.
Integer(Integer)
An integer.
Float(Float<F>)
A 32-bit floating-point number.
A byte array.
A string.
A vector.
A map.
Implementations
impl Key
[src]
pub fn normalize(self) -> Key
[src]
Normalize the key, making sure that all contained maps are sorted.
Trait Implementations
impl<F: Clone> Clone for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F: Debug> Debug for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl Default for Key
[src]
impl<'de, F> Deserialize<'de> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
Deserialize implementation for a Key.
This allows keys to be serialized immediately.
Examples
use serde_derive::Deserialize; use serde_hashkey::{Key, OrderedFloatPolicy}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Deserialize)] struct Foo { key: Key<OrderedFloatPolicy>, } let foo: Foo = serde_json::from_str("{\"key\": 42.42}")?; assert!(matches!(foo.key, Key::Float(..))); Ok(())
pub fn deserialize<D>(deserializer: D) -> Result<Key<F>, D::Error> where
D: Deserializer<'de>,
[src]
D: Deserializer<'de>,
impl<F: Eq> Eq for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<String> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<Vec<(Key<F>, Key<F>), Global>> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<Vec<Key<F>, Global>> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<Vec<u8, Global>> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<bool> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<i128> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<i16> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<i32> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<i64> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<i8> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<u128> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<u16> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<u32> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<u64> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> From<u8> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F: Hash> Hash for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
pub fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<'de, F> IntoDeserializer<'de, Error> for &'de Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
type Deserializer = Deserializer<'de, F>
The type of the deserializer being converted into.
pub fn into_deserializer(self) -> Self::Deserializer
[src]
impl<F: Ord> Ord for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
pub fn cmp(&self, other: &Key<F>) -> Ordering
[src]
#[must_use]pub fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]pub fn clamp(self, min: Self, max: Self) -> Self
1.50.0[src]
impl<F: PartialEq> PartialEq<Key<F>> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F: PartialOrd> PartialOrd<Key<F>> for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
pub fn partial_cmp(&self, other: &Key<F>) -> Option<Ordering>
[src]
pub fn lt(&self, other: &Key<F>) -> bool
[src]
pub fn le(&self, other: &Key<F>) -> bool
[src]
pub fn gt(&self, other: &Key<F>) -> bool
[src]
pub fn ge(&self, other: &Key<F>) -> bool
[src]
impl<F> Serialize for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
Serialize implementation for a Key.
This allows keys to be serialized immediately.
Examples
use serde_derive::Serialize; use serde_hashkey::{Key, OrderedFloatPolicy, OrderedFloat, Float}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)] struct Foo { key: Key<OrderedFloatPolicy>, } let foo: String = serde_json::to_string(&Foo { key: Key::Float(Float::F64(OrderedFloat(42.42f64))) })?; assert_eq!(foo, "{\"key\":42.42}"); Ok(())
impl<F> StructuralEq for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
impl<F> StructuralPartialEq for Key<F> where
F: FloatPolicy,
[src]
F: FloatPolicy,
Auto Trait Implementations
impl<F> RefUnwindSafe for Key<F> where
<F as FloatPolicy>::F32: RefUnwindSafe,
<F as FloatPolicy>::F64: RefUnwindSafe,
[src]
<F as FloatPolicy>::F32: RefUnwindSafe,
<F as FloatPolicy>::F64: RefUnwindSafe,
impl<F> Send for Key<F> where
<F as FloatPolicy>::F32: Send,
<F as FloatPolicy>::F64: Send,
[src]
<F as FloatPolicy>::F32: Send,
<F as FloatPolicy>::F64: Send,
impl<F> Sync for Key<F> where
<F as FloatPolicy>::F32: Sync,
<F as FloatPolicy>::F64: Sync,
[src]
<F as FloatPolicy>::F32: Sync,
<F as FloatPolicy>::F64: Sync,
impl<F> Unpin for Key<F> where
<F as FloatPolicy>::F32: Unpin,
<F as FloatPolicy>::F64: Unpin,
[src]
<F as FloatPolicy>::F32: Unpin,
<F as FloatPolicy>::F64: Unpin,
impl<F> UnwindSafe for Key<F> where
<F as FloatPolicy>::F32: UnwindSafe,
<F as FloatPolicy>::F64: UnwindSafe,
[src]
<F as FloatPolicy>::F32: UnwindSafe,
<F as FloatPolicy>::F64: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,