binator_utils 0.0.0

This contains utils combinator for binator
Documentation
use binator_core::{
  Parse,
  Parsed,
};

/// Implementation of [crate::Utils::map]
#[derive(Clone)]
pub struct Map<Parser, F> {
  parser: Parser,
  f: F,
}

impl<Stream, Context, Parser, TokenSecond, F> Parse<Stream, Context> for Map<Parser, F>
where
  Parser: Parse<Stream, Context>,
  F: Fn(Parser::Token) -> TokenSecond,
{
  type Token = TokenSecond;

  fn parse(&mut self, stream: Stream) -> Parsed<TokenSecond, Stream, Context> {
    self.parser.parse(stream).map_token(&self.f)
  }
}

/// Function style version of [crate::Utils::map]
pub fn map<Stream, Context, Parser, TokenSecond, F>(parser: Parser, f: F) -> Map<Parser, F>
where
  Parser: Parse<Stream, Context>,
  F: Fn(Parser::Token) -> TokenSecond,
{
  Map { parser, f }
}