Mode docs

This commit is contained in:
AF 2023-07-30 10:45:21 +00:00
parent 936f41735a
commit f2533813ac

View File

@ -4,11 +4,24 @@ use super::*;
pub type ModeResult<M, A, E, I> = Result<<M as Mode>::ParseSuccess<A, I>, E>; pub type ModeResult<M, A, E, I> = Result<<M as Mode>::ParseSuccess<A, I>, E>;
/// Mode of parsing.
pub trait Mode { pub trait Mode {
/// Successful parsing, may countain the parser itself
/// (`I`, usually [`Inlining`]).
///
/// See [`FactoryParse::deserialize`].
type ParseSuccess<A, I>; type ParseSuccess<A, I>;
/// Result of extending the value, failing sometimes or always.
///
/// See [`FactoryParse::extend`].
type ExtensionResult<A, E>; type ExtensionResult<A, E>;
/// Data enough to try extending the value.
///
/// May be empty for always-failing extensions.
///
/// See [`FactoryParse::extend`].
type ExtensionSource<A>; type ExtensionSource<A>;
fn bind<A0, A1, E, I>( fn bind<A0, A1, E, I>(
@ -21,6 +34,7 @@ pub trait Mode {
f: impl FnOnce(A0) -> A1, f: impl FnOnce(A0) -> A1,
) -> Self::ParseSuccess<A1, I>; ) -> Self::ParseSuccess<A1, I>;
/// Discard any extra information contained in [`Mode::ParseSuccess`].
fn seal<A, I>(s: Self::ParseSuccess<A, I>) -> A; fn seal<A, I>(s: Self::ParseSuccess<A, I>) -> A;
fn xmap_err<A, E0, E1>( fn xmap_err<A, E0, E1>(
@ -33,6 +47,7 @@ pub trait Mode {
f: impl FnOnce(A0) -> Result<A1, E>, f: impl FnOnce(A0) -> Result<A1, E>,
) -> Self::ExtensionResult<A1, E>; ) -> Self::ExtensionResult<A1, E>;
/// Convert [`Mode::ExtensionResult`] to [`Result`].
fn xseal<A, E>(result: Self::ExtensionResult<A, E>) -> Result<A, E>; fn xseal<A, E>(result: Self::ExtensionResult<A, E>) -> Result<A, E>;
fn smap<A0, A1>( fn smap<A0, A1>(
@ -42,6 +57,7 @@ pub trait Mode {
fn prepare<A>(a: A) -> Self::ExtensionSource<A>; fn prepare<A>(a: A) -> Self::ExtensionSource<A>;
/// For abstract [`FactoryParse::extend`] implementations.
fn xsbind<AB, A, B, E>( fn xsbind<AB, A, B, E>(
ab: Self::ExtensionSource<AB>, ab: Self::ExtensionSource<AB>,
t2ab: impl FnOnce(AB) -> (A, B), t2ab: impl FnOnce(AB) -> (A, B),