From 0b0eeae1ecb73d5e837b1f069db070633a8fcc78 Mon Sep 17 00:00:00 2001 From: timofey Date: Sun, 30 Jul 2023 14:26:36 +0000 Subject: [PATCH] comprehensive `ParseModeExt` --- src/rcore/modes.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/rcore/modes.rs b/src/rcore/modes.rs index 584d490..83a6598 100644 --- a/src/rcore/modes.rs +++ b/src/rcore/modes.rs @@ -125,6 +125,27 @@ pub trait ParseModeExt: ParseMode { ::seal(s) } + /// [`Mode::xmap_err`]. + fn xmap_err( + result: ::ExtensionResult, + f: impl FnOnce(E0) -> E1, + ) -> ::ExtensionResult { + ::xmap_err(result, f) + } + + /// [`Mode::xbind`]. + fn xbind( + result: ::ExtensionResult, + f: impl FnOnce(A0) -> Result, + ) -> ::ExtensionResult { + ::xbind(result, f) + } + + /// [`Mode::xseal`]. + fn xseal(result: ::ExtensionResult) -> Result { + ::xseal(result) + } + /// [`Mode::smap`]. fn smap( source: ::ExtensionSource, @@ -132,6 +153,23 @@ pub trait ParseModeExt: ParseMode { ) -> ::ExtensionSource { ::smap(source, f) } + + /// [`Mode::prepare`]. + fn prepare(a: A) -> ::ExtensionSource { + ::prepare(a) + } + + /// [`Mode::xsbind`]. + fn xsbind( + ab: ::ExtensionSource, + t2ab: impl FnOnce(AB) -> (A, B), + ce: impl FnOnce( + ::ExtensionSource, + ) -> ::ExtensionResult, + ab2t: impl FnOnce(A, B) -> Result, + ) -> ::ExtensionResult { + ::xsbind(ab, t2ab, ce, ab2t) + } } impl ParseModeExt for F {}