[][src]Enum serde_hashkey::Key

pub enum Key<F = RejectFloatPolicy> where
    F: FloatPolicy
{ Unit, Bool(bool), Integer(Integer), Float(Float<F>), Bytes(Box<[u8]>), String(Box<str>), Seq(Box<[Key<F>]>), Map(Box<[(Key<F>, Key<F>)]>), }

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

Unit

A unit value.

Bool(bool)

A boolean value.

Integer(Integer)

An integer.

Float(Float<F>)

A 32-bit floating-point number.

Bytes(Box<[u8]>)

A byte array.

String(Box<str>)

A string.

Seq(Box<[Key<F>]>)

A vector.

Map(Box<[(Key<F>, Key<F>)]>)

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]

impl<F: Debug> Debug for Key<F> where
    F: FloatPolicy
[src]

impl Default for Key[src]

impl<'de, F> Deserialize<'de> for Key<F> where
    F: FloatPolicy
[src]

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(())

impl<F: Eq> Eq for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<String> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<Vec<(Key<F>, Key<F>), Global>> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<Vec<Key<F>, Global>> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<Vec<u8, Global>> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<bool> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<i128> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<i16> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<i32> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<i64> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<i8> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<u128> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<u16> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<u32> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<u64> for Key<F> where
    F: FloatPolicy
[src]

impl<F> From<u8> for Key<F> where
    F: FloatPolicy
[src]

impl<F: Hash> Hash for Key<F> where
    F: FloatPolicy
[src]

impl<'de, F> IntoDeserializer<'de, Error> for &'de Key<F> where
    F: FloatPolicy
[src]

type Deserializer = Deserializer<'de, F>

The type of the deserializer being converted into.

impl<F: Ord> Ord for Key<F> where
    F: FloatPolicy
[src]

impl<F: PartialEq> PartialEq<Key<F>> for Key<F> where
    F: FloatPolicy
[src]

impl<F: PartialOrd> PartialOrd<Key<F>> for Key<F> where
    F: FloatPolicy
[src]

impl<F> Serialize for Key<F> where
    F: FloatPolicy
[src]

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]

impl<F> StructuralPartialEq for Key<F> where
    F: FloatPolicy
[src]

Auto Trait Implementations

impl<F> RefUnwindSafe for Key<F> where
    <F as FloatPolicy>::F32: RefUnwindSafe,
    <F as FloatPolicy>::F64: RefUnwindSafe
[src]

impl<F> Send for Key<F> where
    <F as FloatPolicy>::F32: Send,
    <F as FloatPolicy>::F64: Send
[src]

impl<F> Sync for Key<F> where
    <F as FloatPolicy>::F32: Sync,
    <F as FloatPolicy>::F64: Sync
[src]

impl<F> Unpin for Key<F> where
    <F as FloatPolicy>::F32: Unpin,
    <F as FloatPolicy>::F64: Unpin
[src]

impl<F> UnwindSafe for Key<F> where
    <F as FloatPolicy>::F32: UnwindSafe,
    <F as FloatPolicy>::F64: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.