move WithMode
to mode
This commit is contained in:
parent
f07f0f3607
commit
5bc65753dd
25
src/mode.rs
25
src/mode.rs
@ -1,3 +1,5 @@
|
|||||||
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
/// See [`ModeResult`].
|
/// See [`ModeResult`].
|
||||||
pub type ParseSuccess<M, A, I> = <M as Mode>::ParseSuccess<A, I>;
|
pub type ParseSuccess<M, A, I> = <M as Mode>::ParseSuccess<A, I>;
|
||||||
|
|
||||||
@ -200,3 +202,26 @@ pub trait ImplMode {
|
|||||||
/// Same as [`ParseMode::Mode`]
|
/// Same as [`ParseMode::Mode`]
|
||||||
type Mode: ?Sized + Mode;
|
type Mode: ?Sized + Mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Used with [`WithMode`] for linking [`ImplMode`] to [`FactoryParse`] and [`Atomic`].
|
||||||
|
///
|
||||||
|
/// [`FactoryParse`]: crate::rcore::FactoryParse
|
||||||
|
/// [`Atomic`]: crate::rstd::atomic::Atomic
|
||||||
|
pub trait WithParseMode: ImplMode {
|
||||||
|
/// [`WithMode`] implementing [`FactoryModeProxy`] or [`AtomicModeProxy`].
|
||||||
|
///
|
||||||
|
/// [`FactoryModeProxy`]: crate::rcore::FactoryModeProxy
|
||||||
|
/// [`AtomicModeProxy`]: crate::rstd::atomic::AtomicModeProxy
|
||||||
|
type WithMode: ?Sized;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + ImplMode> ParseMode for T {
|
||||||
|
type Mode = <Self as ImplMode>::Mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized + ImplMode> WithParseMode for T {
|
||||||
|
type WithMode = WithMode<Self, <Self as ParseMode>::Mode>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Used as [`WithParseMode::WithMode`].
|
||||||
|
pub struct WithMode<T: ?Sized, M: ?Sized>(PhantomData<M>, T);
|
||||||
|
@ -35,7 +35,7 @@ pub use self::inctx::InCtx;
|
|||||||
pub use self::inlining::{Inlining, InliningExt, InliningResultExt};
|
pub use self::inlining::{Inlining, InliningExt, InliningResultExt};
|
||||||
pub use self::modes::{
|
pub use self::modes::{
|
||||||
CRegularFactory, ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy,
|
CRegularFactory, ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy,
|
||||||
ModeResultM, RegularFactory, RegularMode, WithMode, WithParseMode,
|
ModeResultM, RegularFactory, RegularMode,
|
||||||
};
|
};
|
||||||
pub use self::origin::{OFctr, Origin};
|
pub use self::origin::{OFctr, Origin};
|
||||||
pub use self::point::Point;
|
pub use self::point::Point;
|
||||||
|
@ -1,28 +1,5 @@
|
|||||||
use std::marker::PhantomData;
|
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
/// Used with [`WithMode`] for linking [`ImplMode`] to [`FactoryParse`] and [`Atomic`].
|
|
||||||
///
|
|
||||||
/// [`Atomic`]: crate::rstd::atomic::Atomic
|
|
||||||
pub trait WithParseMode: ImplMode {
|
|
||||||
/// [`WithMode`] implementing [`FactoryModeProxy`] or [`AtomicModeProxy`].
|
|
||||||
///
|
|
||||||
/// [`AtomicModeProxy`]: crate::rstd::atomic::AtomicModeProxy
|
|
||||||
type WithMode: ?Sized;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: ?Sized + ImplMode> ParseMode for T {
|
|
||||||
type Mode = <Self as ImplMode>::Mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: ?Sized + ImplMode> WithParseMode for T {
|
|
||||||
type WithMode = WithMode<Self, <Self as ParseMode>::Mode>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Used as [`WithParseMode::WithMode`].
|
|
||||||
pub struct WithMode<T: ?Sized, M: ?Sized>(PhantomData<M>, T);
|
|
||||||
|
|
||||||
impl<'a, Ctx: Context<'a>, F: FactoryModeParse<'a, Ctx>> FactoryParse<'a, Ctx> for F {
|
impl<'a, Ctx: Context<'a>, F: FactoryModeParse<'a, Ctx>> FactoryParse<'a, Ctx> for F {
|
||||||
fn deserialize(&self, inctx: impl InCtx<'a, Ctx>) -> ParseResult<'a, Ctx, Self> {
|
fn deserialize(&self, inctx: impl InCtx<'a, Ctx>) -> ParseResult<'a, Ctx, Self> {
|
||||||
self.mdeserialize(inctx).map(Self::seal)
|
self.mdeserialize(inctx).map(Self::seal)
|
||||||
|
Loading…
Reference in New Issue
Block a user