Mode
docs
This commit is contained in:
parent
936f41735a
commit
f2533813ac
@ -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),
|
||||||
|
Loading…
Reference in New Issue
Block a user