npsd 0.2.0

Network payload serializer / deserializer framework
Documentation
use std::{borrow::Cow, collections::{BTreeMap, BTreeSet, BinaryHeap, LinkedList, VecDeque}};
use std::collections::{HashMap, HashSet};

use super::{PayloadInfo, PayloadConstHash};

impl<T: PayloadInfo> PayloadInfo for VecDeque<T> {
    const HASH: u64 = PayloadConstHash(stringify!(VecDeque<T>).as_bytes()) ^ T::HASH;
    const TYPE: &'static str = "VecDeque<T>";
    const SIZE: Option<usize> = None;
}

impl<T: PayloadInfo> PayloadInfo for LinkedList<T> {
    const HASH: u64 = PayloadConstHash(stringify!(LinkedList<T>).as_bytes()) ^ T::HASH;
    const TYPE: &'static str = "LinkedList<T>";
    const SIZE: Option<usize> = None;
}

impl<K: PayloadInfo, V: PayloadInfo> PayloadInfo for HashMap<K, V> {
    const HASH: u64 = PayloadConstHash("HashMap<K, V>".as_bytes()) ^ K::HASH ^ V::HASH;
    const TYPE: &'static str = "HashMap<K, V>";
}

impl<K: PayloadInfo, V: PayloadInfo> PayloadInfo for BTreeMap<K, V> {
    const HASH: u64 = PayloadConstHash("BTreeMap<K, V>".as_bytes()) ^ K::HASH ^ V::HASH;
    const TYPE: &'static str = "BTreeMap<K, V>";
}

impl<K: PayloadInfo> PayloadInfo for HashSet<K> {
    const HASH: u64 = PayloadConstHash("HashSet<K>".as_bytes()) ^ K::HASH;
    const TYPE: &'static str = "HashSet<K>";
}

impl<K: PayloadInfo> PayloadInfo for BTreeSet<K> {
    const HASH: u64 = PayloadConstHash("BTreeSet<K>".as_bytes()) ^ K::HASH;
    const TYPE: &'static str = "BTreeSet<K>";
}

impl<T: PayloadInfo + Ord> PayloadInfo for BinaryHeap<T> {
    const HASH: u64 = PayloadConstHash(stringify!(BinaryHeap<T>).as_bytes()) ^ T::HASH;
    const TYPE: &'static str = "BinaryHeap<T>";
    const SIZE: Option<usize> = None;
}

impl<T: PayloadInfo> PayloadInfo for Vec<T> {
    const HASH: u64 = PayloadConstHash(stringify!(&[T]).as_bytes()) ^ T::HASH;
    const TYPE: &'static str = "Vec<T>";
}

impl<'a, T: PayloadInfo> PayloadInfo for Cow<'a, [T]>  
    where T: Clone
{
    const HASH: u64 = PayloadConstHash(stringify!(&[T]).as_bytes()) ^ T::HASH;
    const TYPE: &'static str = "Cow";
}