1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -69,7 +69,7 @@
version = "2.0.0"
[dependencies.winnow]
-version = "0.6"
+version = "0.7"
features = ["simd"]
[dev-dependencies.pretty_assertions]
--- a/src/signature/decode.rs
+++ b/src/signature/decode.rs
@@ -3,7 +3,7 @@
use bstr::ByteSlice;
use gix_date::{time::Sign, OffsetInSeconds, SecondsSinceUnixEpoch, Time};
use gix_utils::btoi::to_signed;
- use winnow::error::{ErrMode, ErrorKind};
+ use winnow::error::ErrMode;
use winnow::stream::Stream;
use winnow::{
combinator::{alt, opt, separated_pair, terminated},
@@ -18,7 +18,7 @@
/// Parse a signature from the bytes input `i` using `nom`.
pub fn decode<'a, E: ParserError<&'a [u8]> + AddContext<&'a [u8], StrContext>>(
i: &mut &'a [u8],
- ) -> PResult<SignatureRef<'a>, E> {
+ ) -> ModalResult<SignatureRef<'a>, E> {
separated_pair(
identity,
opt(b" "),
@@ -68,31 +68,29 @@
/// Parse an identity from the bytes input `i` (like `name <email>`) using `nom`.
pub fn identity<'a, E: ParserError<&'a [u8]> + AddContext<&'a [u8], StrContext>>(
i: &mut &'a [u8],
- ) -> PResult<IdentityRef<'a>, E> {
+ ) -> ModalResult<IdentityRef<'a>, E> {
let start = i.checkpoint();
let eol_idx = i.find_byte(b'\n').unwrap_or(i.len());
- let right_delim_idx =
- i[..eol_idx]
- .rfind_byte(b'>')
- .ok_or(ErrMode::Cut(E::from_error_kind(i, ErrorKind::Eof).add_context(
- i,
- &start,
- StrContext::Label("Closing '>' not found"),
- )))?;
+ let right_delim_idx = i[..eol_idx]
+ .rfind_byte(b'>')
+ .ok_or(ErrMode::Cut(E::from_input(i).add_context(
+ i,
+ &start,
+ StrContext::Label("Closing '>' not found"),
+ )))?;
let i_name_and_email = &i[..right_delim_idx];
let skip_from_right = i_name_and_email
.iter()
.rev()
.take_while(|b| b.is_ascii_whitespace() || **b == b'>')
.count();
- let left_delim_idx =
- i_name_and_email
- .find_byte(b'<')
- .ok_or(ErrMode::Cut(E::from_error_kind(i, ErrorKind::Eof).add_context(
- &i_name_and_email,
- &start,
- StrContext::Label("Opening '<' not found"),
- )))?;
+ let left_delim_idx = i_name_and_email
+ .find_byte(b'<')
+ .ok_or(ErrMode::Cut(E::from_input(i).add_context(
+ &i_name_and_email,
+ &start,
+ StrContext::Label("Opening '<' not found"),
+ )))?;
let skip_from_left = i[left_delim_idx..]
.iter()
.take_while(|b| b.is_ascii_whitespace() || **b == b'<')
@@ -102,7 +100,7 @@
let email = i
.get(left_delim_idx + skip_from_left..right_delim_idx - skip_from_right)
- .ok_or(ErrMode::Cut(E::from_error_kind(i, ErrorKind::Eof).add_context(
+ .ok_or(ErrMode::Cut(E::from_input(i).add_context(
&i_name_and_email,
&start,
StrContext::Label("Skipped parts run into each other"),
@@ -126,7 +124,7 @@
fn decode<'i>(
i: &mut &'i [u8],
- ) -> PResult<SignatureRef<'i>, winnow::error::TreeError<&'i [u8], winnow::error::StrContext>> {
+ ) -> ModalResult<SignatureRef<'i>, winnow::error::TreeError<&'i [u8], winnow::error::StrContext>> {
signature::decode.parse_next(i)
}
@@ -203,7 +201,7 @@
.map_err(to_bstr_err)
.expect_err("parse fails as > is missing")
.to_string(),
- "in end of file at 'hello < 12345 -1215'\n 0: invalid Closing '>' not found at 'hello < 12345 -1215'\n 1: expected `<name> <<email>> <timestamp> <+|-><HHMM>` at 'hello < 12345 -1215'\n"
+ "in fail at 'hello < 12345 -1215'\n 0: invalid Closing '>' not found at 'hello < 12345 -1215'\n 1: expected `<name> <<email>> <timestamp> <+|-><HHMM>` at 'hello < 12345 -1215'\n"
);
}
|