@@ -30,6 +30,7 @@ pub fn Parser(comptime _T: type) type {
30
30
pub const mapConst = mecha .mapConst ;
31
31
pub const map = mecha .map ;
32
32
pub const opt = mecha .opt ;
33
+ pub const peek = mecha .peek ;
33
34
};
34
35
}
35
36
@@ -361,6 +362,27 @@ test "opt" {
361
362
try expectOk (? u8 , 0 , null , try p1 .parse (fa , "1" ));
362
363
}
363
364
365
+ pub fn peek (comptime parser : anytype ) mecha.Parser (void ) {
366
+ const Res = mecha .Result (void );
367
+ return .{ .parse = struct {
368
+ fn parse (allocator : mem.Allocator , str : []const u8 ) mecha.Error ! Res {
369
+ const res = try parser .parse (allocator , str );
370
+ return switch (res .value ) {
371
+ .ok = > Res .ok (0 , {}),
372
+ .err = > Res .err (0 ),
373
+ };
374
+ }
375
+ }.parse };
376
+ }
377
+
378
+ test "peek" {
379
+ const fa = testing .failing_allocator ;
380
+ const p1 = comptime ascii .range ('a' , 'z' ).peek ();
381
+ try expectOk (void , 0 , {}, try p1 .parse (fa , "a" ));
382
+ try expectOk (void , 0 , {}, try p1 .parse (fa , "aa" ));
383
+ try expectErr (void , 0 , try p1 .parse (fa , "1" ));
384
+ }
385
+
364
386
fn parsersTypes (comptime parsers : anytype ) []const type {
365
387
var types : []const type = &[_ ]type {};
366
388
for (parsers ) | parser | {
0 commit comments