use crate::{Error, Read};
use ::bytes::Buf;
use core::cmp::Ordering;
pub mod btree_map;
pub mod btree_set;
pub mod bytes;
#[cfg(feature = "std")]
pub mod hash_map;
#[cfg(feature = "std")]
pub mod hash_set;
#[cfg(feature = "std")]
pub mod net;
pub mod primitives;
pub mod tuple;
pub mod vec;
fn read_ordered_set<K, F>(
buf: &mut impl Buf,
len: usize,
cfg: &K::Cfg,
mut insert: F,
set_type: &'static str,
) -> Result<(), Error>
where
K: Read + Ord,
F: FnMut(K) -> bool,
{
let mut last: Option<K> = None;
for _ in 0..len {
let item = K::read_cfg(buf, cfg)?;
if let Some(ref last) = last {
match item.cmp(last) {
Ordering::Equal => return Err(Error::Invalid(set_type, "Duplicate item")),
Ordering::Less => return Err(Error::Invalid(set_type, "Items must ascend")),
_ => {}
}
}
if let Some(last) = last.take() {
insert(last);
}
last = Some(item);
}
if let Some(last) = last {
insert(last);
}
Ok(())
}