diff --git a/src/rcore.rs b/src/rcore.rs index 64e753e..16294fd 100644 --- a/src/rcore.rs +++ b/src/rcore.rs @@ -33,8 +33,8 @@ 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::{ - ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy, Mode, ParseMode, - ParseResultM, RegularFactory, RegularMode, WithMode, WithParseMode, + ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy, ImplMode, Mode, + ParseMode, ParseResultM, RegularFactory, RegularMode, WithMode, WithParseMode, }; pub use self::origin::{OFctr, Origin}; pub use self::point::Point; diff --git a/src/rcore/modes.rs b/src/rcore/modes.rs index 69adccb..c0d0a8d 100644 --- a/src/rcore/modes.rs +++ b/src/rcore/modes.rs @@ -42,7 +42,15 @@ pub trait WithParseMode: ParseMode { type WithMode: ?Sized; } -impl WithParseMode for T { +pub trait ImplMode { + type Mode: ?Sized + Mode; +} + +impl ParseMode for T { + type Mode = ::Mode; +} + +impl WithParseMode for T { type WithMode = WithMode::Mode>; } diff --git a/src/rstd/atomic/array.rs b/src/rstd/atomic/array.rs index 3e68ce2..e6c0e14 100644 --- a/src/rstd/atomic/array.rs +++ b/src/rstd/atomic/array.rs @@ -38,7 +38,7 @@ impl AtomicBase for [u8; N] { type AParseError = ArrayParseError; } -impl ParseMode for [u8; N] { +impl ImplMode for [u8; N] { type Mode = InliningMode; } diff --git a/src/rstd/atomic/atomic_object.rs b/src/rstd/atomic/atomic_object.rs index 4b3fd27..2007bab 100644 --- a/src/rstd/atomic/atomic_object.rs +++ b/src/rstd/atomic/atomic_object.rs @@ -90,7 +90,7 @@ where type ParseError = A::AParseError; } -impl ParseMode for AtomicFactory { +impl ImplMode for AtomicFactory { type Mode = A::Mode; } diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs index 309fc2d..3be9472 100644 --- a/src/rstd/atomic/au64.rs +++ b/src/rstd/atomic/au64.rs @@ -38,7 +38,7 @@ impl AtomicBase for u64 { type AParseError = IntParseError; } -impl ParseMode for u64 { +impl ImplMode for u64 { type Mode = InliningMode; } diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs index 7c30eb4..38fcc8f 100644 --- a/src/rstd/atomic/boolean.rs +++ b/src/rstd/atomic/boolean.rs @@ -45,7 +45,7 @@ impl AtomicBase for bool { type AParseError = BooleanParseError; } -impl ParseMode for bool { +impl ImplMode for bool { type Mode = InliningMode; } diff --git a/src/rstd/atomic/modes.rs b/src/rstd/atomic/modes.rs index 50f8b83..54cfac0 100644 --- a/src/rstd/atomic/modes.rs +++ b/src/rstd/atomic/modes.rs @@ -20,7 +20,7 @@ where } } -pub trait RegularAtomic: AtomicBase + ParseMode { +pub trait RegularAtomic: AtomicBase + ImplMode { fn ra_deserialize(inlining: impl Inlining) -> AParseResult; fn ra_extend(self, tail: &[u8]) -> AParseResult; } diff --git a/src/rstd/atomic/plain.rs b/src/rstd/atomic/plain.rs index 0214ab4..e4a58c6 100644 --- a/src/rstd/atomic/plain.rs +++ b/src/rstd/atomic/plain.rs @@ -32,7 +32,7 @@ impl AtomicBase for Plain { type AParseError = PlainParseError; } -impl ParseMode for Plain { +impl ImplMode for Plain { type Mode = RegularMode; } diff --git a/src/rstd/collections/stack.rs b/src/rstd/collections/stack.rs index eadb5f7..b10619c 100644 --- a/src/rstd/collections/stack.rs +++ b/src/rstd/collections/stack.rs @@ -113,11 +113,11 @@ impl<'a, Ctx: Context<'a>, F: FactoryBase<'a, Ctx>> FactoryBase<'a, Ctx> for Sta type ParseError = StackParseError>; } -impl ParseMode for StackNodeFactory { +impl ImplMode for StackNodeFactory { type Mode = F::Mode; } -impl<'a, Ctx: Context<'a>, F: RegularFactory<'a, Ctx>> +impl<'a, Ctx: Context<'a>, F: ImplMode + RegularFactory<'a, Ctx>> ExternalPointsProxy<'a, Ctx, Stack<'a, Ctx, Mtbl<'a, Ctx, F>>> for WithMode where F::Mtbl: MentionableTop<'a, Ctx>, @@ -130,7 +130,7 @@ where } } -impl<'a, Ctx: Context<'a>, F: RegularFactory<'a, Ctx>> RegularFactory<'a, Ctx> +impl<'a, Ctx: Context<'a>, F: ImplMode + RegularFactory<'a, Ctx>> RegularFactory<'a, Ctx> for StackNodeFactory where F::Mtbl: MentionableTop<'a, Ctx>, @@ -229,7 +229,7 @@ where } } -impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> +impl<'a, Ctx: Context<'a>, F: ImplMode + InlineableFactory<'a, Ctx>> ExternalPointsProxy<'a, Ctx, Stack<'a, Ctx, Mtbl<'a, Ctx, F>>> for WithMode where F::Mtbl: MentionableTop<'a, Ctx>, @@ -242,7 +242,7 @@ where } } -impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> InlineableFactory<'a, Ctx> +impl<'a, Ctx: Context<'a>, F: ImplMode + InlineableFactory<'a, Ctx>> InlineableFactory<'a, Ctx> for StackNodeFactory where F::Mtbl: MentionableTop<'a, Ctx>, @@ -261,7 +261,7 @@ where } } -impl<'a, Ctx: Context<'a>, F: FixedSizeFactory<'a, Ctx>> FixedSizeFactory<'a, Ctx> +impl<'a, Ctx: Context<'a>, F: ImplMode + FixedSizeFactory<'a, Ctx>> FixedSizeFactory<'a, Ctx> for StackNodeFactory where F::Mtbl: MentionableTop<'a, Ctx>, @@ -271,7 +271,7 @@ where } } -impl<'a, Ctx: Context<'a>, F: ConstSizeFactory<'a, Ctx>> ConstSizeFactory<'a, Ctx> +impl<'a, Ctx: Context<'a>, F: ImplMode + ConstSizeFactory<'a, Ctx>> ConstSizeFactory<'a, Ctx> for StackNodeFactory where F::Mtbl: MentionableTop<'a, Ctx>, diff --git a/src/rstd/collections/tree.rs b/src/rstd/collections/tree.rs index ba6b0f0..226076a 100644 --- a/src/rstd/collections/tree.rs +++ b/src/rstd/collections/tree.rs @@ -140,7 +140,7 @@ impl<'a, Ctx: Context<'a>, F: FactoryBase<'a, Ctx>> FactoryBase<'a, Ctx> for Nod type ParseError = TreeParseError; } -impl ParseMode for NodeFactory { +impl ImplMode for NodeFactory { type Mode = RegularMode; } @@ -168,7 +168,7 @@ impl<'a, Ctx: Context<'a>, F: FactoryBase<'a, Ctx>> FactoryBase<'a, Ctx> for Tre type ParseError = TreeParseError; } -impl ParseMode for TreeFactory { +impl ImplMode for TreeFactory { type Mode = InliningMode; } diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index adab0a5..8046285 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -53,7 +53,7 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> { pub type ADParseResult = Result<(A, D), AParseError>; /// Atomic analogue of [`InlineableFactory`]/[`InlineableObject`]. -pub trait InlineableAtomic: AtomicBase + ParseMode { +pub trait InlineableAtomic: AtomicBase + ImplMode { fn a_extension_error(tail: &[u8]) -> Self::AParseError; fn a_ideserialize(inlining: D) -> ADParseResult; diff --git a/src/rstd/nullable.rs b/src/rstd/nullable.rs index 0618d1d..43e31e4 100644 --- a/src/rstd/nullable.rs +++ b/src/rstd/nullable.rs @@ -62,7 +62,7 @@ impl<'a, Ctx: Context<'a>, F: FactoryBase<'a, Ctx>> FactoryBase<'a, Ctx> for Nul type ParseError = PointParseError; } -impl ParseMode for NullableFactory { +impl ImplMode for NullableFactory { type Mode = InliningMode; } diff --git a/src/rstd/typeless.rs b/src/rstd/typeless.rs index 111b023..f1727b4 100644 --- a/src/rstd/typeless.rs +++ b/src/rstd/typeless.rs @@ -95,7 +95,7 @@ impl<'a, Ctx: Context<'a>> FactoryBase<'a, Ctx> for TypelessFactory<'a, Ctx> { type ParseError = TypelessError<'a>; } -impl<'a, Ctx: Context<'a>> ParseMode for TypelessFactory<'a, Ctx> { +impl<'a, Ctx: Context<'a>> ImplMode for TypelessFactory<'a, Ctx> { type Mode = RegularMode; }