diff --git a/src/parser.rs b/src/parser.rs index a0418fb..3f55659 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -391,9 +391,9 @@ pub struct Parser<'a> { impl<'a> Parser<'a> { /// Attempt to zero-copy parse the provided `&str`. On success, returns a - /// [`Parser`] that provides methods to accessing leading comments and sections - /// of a `git-config` file and can be converted into an iterator of [`Event`] - /// for higher level processing. + /// [`Parser`] that provides methods to accessing leading comments and + /// sections of a `git-config` file and can be converted into an iterator of + /// [`Event`] for higher level processing. /// /// This function is identical to [`parse_from_str`]. /// @@ -406,6 +406,20 @@ impl<'a> Parser<'a> { parse_from_str(s) } + /// Attempt to zero-copy parse the provided bytes. On success, returns a + /// [`Parser`] that provides methods to accessing leading comments and + /// sections of a `git-config` file and can be converted into an iterator of + /// [`Event`] for higher level processing. + /// + /// # Errors + /// + /// Returns an error if the string provided is not a valid `git-config`. + /// This generally is due to either invalid names or if there's extraneous + /// data succeeding valid `git-config` data. + pub fn from_bytes(s: impl Into<&'a BStr>) -> Result> { + parse_from_bytes(s.into()) + } + /// Returns the leading events (any comments, whitespace, or newlines before /// a section) from the parser. Consider [`Parser::take_frontmatter`] if /// you need an owned copy only once. If that function was called, then this @@ -471,6 +485,20 @@ impl<'a> Parser<'a> { /// This generally is due to either invalid names or if there's extraneous /// data succeeding valid `git-config` data. pub fn parse_from_str(input: &str) -> Result, ParserError> { + parse_from_bytes(input.as_bytes()) +} + +/// Attempt to zero-copy parse the provided bytes. On success, returns a +/// [`Parser`] that provides methods to accessing leading comments and sections +/// of a `git-config` file and can be converted into an iterator of [`Event`] +/// for higher level processing. +/// +/// # Errors +/// +/// Returns an error if the string provided is not a valid `git-config`. +/// This generally is due to either invalid names or if there's extraneous +/// data succeeding valid `git-config` data. +pub fn parse_from_bytes(input: &[u8]) -> Result, ParserError> { let (i, frontmatter) = many0(alt(( map(comment, Event::Comment), map(take_spaces, |whitespace| {