move AtomicExt to atomic

This commit is contained in:
AF 2023-07-30 19:46:14 +00:00
parent 565f884bf8
commit 09560ea690
3 changed files with 24 additions and 22 deletions

View File

@ -43,3 +43,26 @@ pub trait Atomic: AtomicBase + ParseMode {
/// [`FactoryParse::extend`]: crate::rcore::FactoryParse::extend /// [`FactoryParse::extend`]: crate::rcore::FactoryParse::extend
fn a_extend(self, tail: &[u8]) -> AParseResult<Self>; fn a_extend(self, tail: &[u8]) -> AParseResult<Self>;
} }
fn _parse_slice<A: Atomic>(slice: &[u8]) -> AParseResult<A> {
let mut deserializer = SliceDeserializer::from(slice);
let atomic = A::a_deserialize(&mut deserializer)?;
let tail = deserializer.read_all();
if tail.is_empty() {
Ok(atomic)
} else {
A::a_extend(atomic, tail)
}
}
/// Extension trait to provide method-like utilities associated with [Atomic]s.
pub trait AtomicExt: Atomic {
/// Static equivalent of [`FactoryExt::parse_slice`].
///
/// [`FactoryExt::parse_slice`]: crate::rcore::FactoryExt::parse_slice
fn parse_slice(slice: &[u8]) -> AParseResult<Self> {
_parse_slice(slice)
}
}
impl<A: Atomic> AtomicExt for A {}

View File

@ -5,7 +5,7 @@ use super::*;
/// [Deserializer] for slices. Used in [`FactoryExt::parse_slice`] and [`AtomicExt::parse_slice`]. /// [Deserializer] for slices. Used in [`FactoryExt::parse_slice`] and [`AtomicExt::parse_slice`].
/// ///
/// [`FactoryExt::parse_slice`]: crate::rcore::FactoryExt::parse_slice /// [`FactoryExt::parse_slice`]: crate::rcore::FactoryExt::parse_slice
/// [`AtomicExt::parse_slice`]: crate::rstd::atomic::AtomicExt::parse_slice /// [`AtomicExt::parse_slice`]: crate::atomic::AtomicExt::parse_slice
pub struct SliceDeserializer<'a> { pub struct SliceDeserializer<'a> {
slice: &'a [u8], slice: &'a [u8],
pos: usize, pos: usize,

View File

@ -12,24 +12,3 @@ use std::marker::PhantomData;
use crate::{atomic::*, mode::*}; use crate::{atomic::*, mode::*};
use super::*; use super::*;
fn _parse_slice<A: Atomic>(slice: &[u8]) -> AParseResult<A> {
let mut deserializer = SliceDeserializer::from(slice);
let atomic = A::a_deserialize(&mut deserializer)?;
let tail = deserializer.read_all();
if tail.is_empty() {
Ok(atomic)
} else {
A::a_extend(atomic, tail)
}
}
/// Extension trait to provide method-like utilities associated with [Atomic]s.
pub trait AtomicExt: Atomic {
/// Static equivalent of [`FactoryExt::parse_slice`].
fn parse_slice(slice: &[u8]) -> AParseResult<Self> {
_parse_slice(slice)
}
}
impl<A: Atomic> AtomicExt for A {}