atomic::inlining

This commit is contained in:
AF 2023-07-30 19:56:24 +00:00
parent 060499a383
commit e15d1980ba
4 changed files with 32 additions and 25 deletions

View File

@ -1,3 +1,4 @@
mod inlining;
mod modes;
mod regular;
@ -5,6 +6,7 @@ use std::error::Error;
use crate::mode::*;
pub use self::inlining::{AIParseResult, CInliningAtomic, InliningAtomic};
pub use self::modes::{
AExtensionResultM, AExtensionSourceM, AModeResultM, AtomicModeParse, AtomicModeProxy,
};

29
src/atomic/inlining.rs Normal file
View File

@ -0,0 +1,29 @@
pub use super::*;
pub type AIParseResult<A, I> = Result<(A, I), AParseError<A>>;
pub trait CInliningAtomic: AtomicBase + ImplMode<Mode = InliningMode> {
fn ca_extension_error(tail: &[u8]) -> Self::AParseError;
fn ca_ideserialize<I: Stream>(stream: I) -> AIParseResult<Self, I>;
}
/// Atomic analogue of [`InliningFactory`]/[`InliningObject`].
///
/// [`InliningFactory`]: crate::rstd::inlining::InliningFactory
/// [`InliningObject`]: crate::rstd::inlining::InliningObject
pub trait InliningAtomic: AtomicBase + ParseMode<Mode = InliningMode> {
fn a_extension_error(tail: &[u8]) -> Self::AParseError;
fn a_ideserialize<I: Stream>(strean: I) -> AIParseResult<Self, I>;
}
impl<A: AtomicModeParse + ParseMode<Mode = InliningMode>> InliningAtomic for A {
fn a_extension_error(tail: &[u8]) -> Self::AParseError {
A::ma_extend((), tail)
}
fn a_ideserialize<I: Stream>(stream: I) -> AIParseResult<Self, I> {
A::ma_deserialize(stream)
}
}

View File

@ -1,3 +1,4 @@
use crate::atomic::*;
pub mod context;
use std::{error::Error, fmt::Display};

View File

@ -67,31 +67,6 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> {
const SIZE: usize;
}
pub type AIParseResult<A, I> = Result<(A, I), AParseError<A>>;
pub trait CInliningAtomic: AtomicBase + ImplMode<Mode = InliningMode> {
fn ca_extension_error(tail: &[u8]) -> Self::AParseError;
fn ca_ideserialize<I: Stream>(stream: I) -> AIParseResult<Self, I>;
}
/// Atomic analogue of [`InliningFactory`]/[`InliningObject`].
pub trait InliningAtomic: AtomicBase + ParseMode<Mode = InliningMode> {
fn a_extension_error(tail: &[u8]) -> Self::AParseError;
fn a_ideserialize<I: Stream>(strean: I) -> AIParseResult<Self, I>;
}
impl<A: AtomicModeParse + ParseMode<Mode = InliningMode>> InliningAtomic for A {
fn a_extension_error(tail: &[u8]) -> Self::AParseError {
A::ma_extend((), tail)
}
fn a_ideserialize<I: Stream>(stream: I) -> AIParseResult<Self, I> {
A::ma_deserialize(stream)
}
}
/// Atomic analogue of [`ConstSizeFactory`]/[`ConstSizeObject`].
///
/// Note: `FixedSizeAtomic` doesn't exist because it would