diff --git a/src/mode.rs b/src/mode.rs index f615dec..e8720cf 100644 --- a/src/mode.rs +++ b/src/mode.rs @@ -34,9 +34,9 @@ pub type ModeResult = Result, E>; /// [`()`]: unit pub trait Mode { /// Successful parsing, may countain the parser itself - /// (`I`, usually [`Inlining`]). + /// (`I`, usually [`Stream`]). /// - /// [`Inlining`]: crate::rcore::Inlining + /// [`Stream`]: crate::rcore::Stream type ParseSuccess; /// Result of extending the value, failing sometimes or always. diff --git a/src/rcore.rs b/src/rcore.rs index 67d5ad4..5159600 100644 --- a/src/rcore.rs +++ b/src/rcore.rs @@ -9,7 +9,6 @@ mod demoted; mod diagnostic; mod hashing; mod inctx; -mod inlining; mod modes; mod origin; mod point; @@ -17,6 +16,7 @@ mod points; mod resolution; mod resolver_origin; mod slice_deserializer; +mod stream; use std::{error::Error, rc::Rc}; @@ -31,7 +31,6 @@ pub use self::demoted::Demoted; pub use self::diagnostic::Diagnostic; pub use self::hashing::{Hash, HASH_SIZE, HASH_ZEROS}; pub use self::inctx::InCtx; -pub use self::inlining::{Inlining, InliningExt, InliningResultExt}; pub use self::modes::{ CRegularFactory, ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy, ModeResultM, RegularFactory, @@ -44,6 +43,7 @@ pub use self::resolution::{ ResolutionFailure, ResolutionResult, Resolver, ResolverMap, }; pub use self::slice_deserializer::SliceDeserializer; +pub use self::stream::{Stream, StreamExt, StreamResultExt}; /// Helper alias for [`WeakFunctor::F`] of [`FunctorContext::T`]. pub type Wrapped<'a, Ctx, A> = WrapC<'a, A, Ctx>; diff --git a/src/rcore/addresses.rs b/src/rcore/addresses.rs index 0256429..1b69f55 100644 --- a/src/rcore/addresses.rs +++ b/src/rcore/addresses.rs @@ -26,7 +26,7 @@ impl Addresses { } } -pub(super) trait InliningAddresses: Inlining { +pub(super) trait InliningAddresses: Stream { fn inext_address( self, addresses: &mut Addresses, @@ -53,7 +53,7 @@ pub(super) trait InliningAddresses: Inlining { } } -impl InliningAddresses for D {} +impl InliningAddresses for D {} fn _parse_slice<'a, Ctx: Context<'a>, F: FactoryParse<'a, Ctx>>( factory: &F, diff --git a/src/rcore/demoted.rs b/src/rcore/demoted.rs index 707a495..a693c16 100644 --- a/src/rcore/demoted.rs +++ b/src/rcore/demoted.rs @@ -3,7 +3,7 @@ use super::*; /// Demoted [`InCtx`], returned by [`InCtx::demote`]. Use when a concrete type required. pub struct Demoted<'a: 'c, 'c, Ctx: Context<'a>>(pub(super) &'c mut dyn DeCtx<'a, Ctx>); -impl<'a: 'c, 'c, Ctx: Context<'a>> Inlining for Demoted<'a, 'c, Ctx> { +impl<'a: 'c, 'c, Ctx: Context<'a>> Stream for Demoted<'a, 'c, Ctx> { fn iread_n( self, n: usize, diff --git a/src/rcore/inctx.rs b/src/rcore/inctx.rs index 382c3c9..8ecdc9c 100644 --- a/src/rcore/inctx.rs +++ b/src/rcore/inctx.rs @@ -1,7 +1,7 @@ use super::*; -/// [Inlining] context. -pub trait InCtx<'a, Ctx: Context<'a>>: Inlining { +/// Inlining ([Stream]ed) context. +pub trait InCtx<'a, Ctx: Context<'a>>: Stream { /// Read the next [Address]. fn icnext_address(self, err: impl FnOnce(&[u8]) -> E) -> Result<(Address, Self), E>; @@ -28,7 +28,7 @@ pub trait InCtx<'a, Ctx: Context<'a>>: Inlining { Self: 'd; } -impl<'a: 'c, 'c, Ctx: Context<'a>> Inlining for &'c mut dyn DeCtx<'a, Ctx> { +impl<'a: 'c, 'c, Ctx: Context<'a>> Stream for &'c mut dyn DeCtx<'a, Ctx> { fn iread_n( self, n: usize, diff --git a/src/rcore/inlining.rs b/src/rcore/stream.rs similarity index 78% rename from src/rcore/inlining.rs rename to src/rcore/stream.rs index 54d0dbb..5050428 100644 --- a/src/rcore/inlining.rs +++ b/src/rcore/stream.rs @@ -2,7 +2,7 @@ use super::*; /// [`Deserializer`] with a cleaner interface for parsing multiple objects /// from one stream ("inlining"). -pub trait Inlining: Sized { +pub trait Stream: Sized { /// Try to read `n` bytes. Consumes the deserializer on failure. fn iread_n( self, @@ -18,9 +18,9 @@ pub trait Inlining: Sized { fn itell(&self) -> usize; } -/// [`InliningExt::iread_n_const`]. -pub trait InliningExt: Inlining { - /// `const`-length equivalent of [`Inlining::iread_n`]. +/// [`StreamExt::iread_n_const`]. +pub trait StreamExt: Stream { + /// `const`-length equivalent of [`Stream::iread_n`]. fn iread_n_const( self, err: impl FnOnce(&[u8]) -> E, @@ -33,9 +33,9 @@ pub trait InliningExt: Inlining { } } -impl InliningExt for D {} +impl StreamExt for I {} -impl Inlining for &mut D { +impl Stream for &mut D { fn iread_n( self, n: usize, @@ -59,13 +59,13 @@ impl Inlining for &mut D { } } -/// [`InliningResultExt::seal`]. -pub trait InliningResultExt { +/// [`StreamResultExt::seal`]. +pub trait StreamResultExt { /// Drop the deserializer from parsing result. fn seal(self) -> Result; } -impl InliningResultExt for Result<(A, I), E> { +impl StreamResultExt for Result<(A, I), E> { fn seal(self) -> Result { self.map(|(a, _)| a) } diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs index 402f70a..68b6232 100644 --- a/src/rstd/atomic.rs +++ b/src/rstd/atomic.rs @@ -35,7 +35,7 @@ pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable { /// to an empty sequence. pub trait Atomic: AtomicBase + ParseMode { /// Static equivalent of [`FactoryParse::deserialize`]. - fn a_deserialize(inlining: impl Inlining) -> AParseResult; + fn a_deserialize(stream: impl Stream) -> AParseResult; /// Static equivalent of [`FactoryParse::extend`]. fn a_extend(self, tail: &[u8]) -> AParseResult; } diff --git a/src/rstd/atomic/array.rs b/src/rstd/atomic/array.rs index 81f94a0..7435f26 100644 --- a/src/rstd/atomic/array.rs +++ b/src/rstd/atomic/array.rs @@ -47,8 +47,8 @@ impl CInliningAtomic for [u8; N] { ArrayParseError::ExtraData(tail.len()) } - fn ca_ideserialize(inlining: D) -> ADParseResult { - inlining.iread_n_const::(|slice| ArrayParseError::from(slice)) + fn ca_ideserialize(stream: I) -> AIParseResult { + stream.iread_n_const::(|slice| ArrayParseError::from(slice)) } } diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs index 3caee64..e98fdff 100644 --- a/src/rstd/atomic/au64.rs +++ b/src/rstd/atomic/au64.rs @@ -47,9 +47,9 @@ impl CInliningAtomic for u64 { IntParseError::ExtraData(tail.len()) } - fn ca_ideserialize(inlining: D) -> ADParseResult { - let (x, inlining) = inlining.iread_n_const::<8>(|slice| IntParseError::from(slice))?; - Ok((u64::from_le_bytes(x), inlining)) + fn ca_ideserialize(stream: I) -> AIParseResult { + let (x, stream) = stream.iread_n_const::<8>(|slice| IntParseError::from(slice))?; + Ok((u64::from_le_bytes(x), stream)) } } diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs index c7d9e82..1164d52 100644 --- a/src/rstd/atomic/boolean.rs +++ b/src/rstd/atomic/boolean.rs @@ -54,12 +54,11 @@ impl CInliningAtomic for bool { BooleanParseError::ExtraData(tail.len()) } - fn ca_ideserialize(inlining: D) -> ADParseResult { - let (byte, inlining) = - inlining.iread_n_const::<1>(|slice| BooleanParseError::from(slice))?; + fn ca_ideserialize(stream: I) -> AIParseResult { + let (byte, stream) = stream.iread_n_const::<1>(|slice| BooleanParseError::from(slice))?; match byte[0] { - 0 => Ok((false, inlining)), - 1 => Ok((true, inlining)), + 0 => Ok((false, stream)), + 1 => Ok((true, stream)), value => Err(BooleanParseError::OutOfBounds(value)), } } diff --git a/src/rstd/atomic/modes.rs b/src/rstd/atomic/modes.rs index afdd7ac..a53a01a 100644 --- a/src/rstd/atomic/modes.rs +++ b/src/rstd/atomic/modes.rs @@ -1,8 +1,8 @@ use super::*; impl Atomic for A { - fn a_deserialize(inlining: impl Inlining) -> AParseResult { - Self::ma_deserialize(inlining).map(Self::seal) + fn a_deserialize(stream: impl Stream) -> AParseResult { + Self::ma_deserialize(stream).map(Self::seal) } fn a_extend(self, tail: &[u8]) -> AParseResult { @@ -22,7 +22,7 @@ pub type AExtensionSourceM = ExtensionSourceP; /// A more generic version of [`Atomic`]. pub trait AtomicModeParse: AtomicBase + ParseMode { /// A more generic version of [`Atomic::a_deserialize`]. - fn ma_deserialize(inlining: I) -> AModeResultM; + fn ma_deserialize(stream: I) -> AModeResultM; /// A more generic version of [`Atomic::a_extend`]. fn ma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM; @@ -34,7 +34,7 @@ pub trait AtomicModeProxy { type A: AtomicBase + ParseMode; /// External implementation of [`AtomicModeParse::ma_deserialize`]. - fn pma_deserialize(inlining: I) -> AModeResultM; + fn pma_deserialize(stream: I) -> AModeResultM; /// External implementation of [`AtomicModeParse::ma_extend`]. fn pma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM; @@ -44,8 +44,8 @@ impl AtomicModeParse for A where ::WithMode: AtomicModeProxy, { - fn ma_deserialize(inlining: I) -> AModeResultM { - <::WithMode as AtomicModeProxy>::pma_deserialize(inlining) + fn ma_deserialize(stream: I) -> AModeResultM { + <::WithMode as AtomicModeProxy>::pma_deserialize(stream) } fn ma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { @@ -56,7 +56,7 @@ where /// For auto-deriving [`RegularAtomic`] from concrete implementations. pub trait CRegularAtomic: AtomicBase + ImplMode { /// Concrete implementation of [`RegularAtomic::ra_deserialize`]. - fn cra_deserialize(inlining: impl Inlining) -> AParseResult; + fn cra_deserialize(stream: impl Stream) -> AParseResult; /// Concrete implementation of [`RegularAtomic::ra_extend`]. fn cra_extend(self, tail: &[u8]) -> AParseResult; } @@ -64,14 +64,14 @@ pub trait CRegularAtomic: AtomicBase + ImplMode { /// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`]. pub trait RegularAtomic: AtomicBase + ParseMode { /// Same as [`AtomicModeParse::ma_deserialize`]. - fn ra_deserialize(inlining: impl Inlining) -> AParseResult; + fn ra_deserialize(stream: impl Stream) -> AParseResult; /// Same as [`AtomicModeParse::ma_extend`]. fn ra_extend(self, tail: &[u8]) -> AParseResult; } impl> RegularAtomic for A { - fn ra_deserialize(inlining: impl Inlining) -> AParseResult { - A::ma_deserialize(inlining) + fn ra_deserialize(stream: impl Stream) -> AParseResult { + A::ma_deserialize(stream) } fn ra_extend(self, tail: &[u8]) -> AParseResult { @@ -82,8 +82,8 @@ impl> RegularAtomic for A { impl AtomicModeProxy for WithMode { type A = A; - fn pma_deserialize(inlining: I) -> AModeResultM { - A::cra_deserialize(inlining) + fn pma_deserialize(stream: I) -> AModeResultM { + A::cra_deserialize(stream) } fn pma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { diff --git a/src/rstd/atomic/plain.rs b/src/rstd/atomic/plain.rs index 954ccb7..e78e9fa 100644 --- a/src/rstd/atomic/plain.rs +++ b/src/rstd/atomic/plain.rs @@ -27,8 +27,8 @@ impl ImplMode for Plain { } impl CRegularAtomic for Plain { - fn cra_deserialize(inlining: impl Inlining) -> AParseResult { - Ok(inlining.iread_all(Plain::from_slice)) + fn cra_deserialize(stream: impl Stream) -> AParseResult { + Ok(stream.iread_all(Plain::from_slice)) } fn cra_extend(mut self, tail: &[u8]) -> AParseResult { diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index 3dcef27..d9b9228 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -71,19 +71,19 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> { const SIZE: usize; } -pub type ADParseResult = Result<(A, D), AParseError>; +pub type AIParseResult = Result<(A, I), AParseError>; pub trait CInliningAtomic: AtomicBase + ImplMode { fn ca_extension_error(tail: &[u8]) -> Self::AParseError; - fn ca_ideserialize(inlining: D) -> ADParseResult; + fn ca_ideserialize(stream: I) -> AIParseResult; } /// Atomic analogue of [`InliningFactory`]/[`InliningObject`]. pub trait InliningAtomic: AtomicBase + ParseMode { fn a_extension_error(tail: &[u8]) -> Self::AParseError; - fn a_ideserialize(inlining: D) -> ADParseResult; + fn a_ideserialize(strean: I) -> AIParseResult; } impl> InliningAtomic for A { @@ -91,8 +91,8 @@ impl> InliningAtomic for A { A::ma_extend((), tail) } - fn a_ideserialize(inlining: D) -> ADParseResult { - A::ma_deserialize(inlining) + fn a_ideserialize(stream: I) -> AIParseResult { + A::ma_deserialize(stream) } } diff --git a/src/rstd/inlining/modes.rs b/src/rstd/inlining/modes.rs index a4da016..c311d24 100644 --- a/src/rstd/inlining/modes.rs +++ b/src/rstd/inlining/modes.rs @@ -93,8 +93,8 @@ impl<'a, Ctx: Context<'a>, F: CInliningFactory<'a, Ctx>> FactoryModeProxy<'a, Ct impl AtomicModeProxy for WithMode { type A = A; - fn pma_deserialize(inlining: I) -> AModeResultM { - A::ca_ideserialize(inlining) + fn pma_deserialize(stream: I) -> AModeResultM { + A::ca_ideserialize(stream) } fn pma_extend(_atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM {