History

refactor

Sebastian Thiel committed 6 years ago

Commit 0104f4c1 parent 6f6ee8f2 files · +15 −23Browse files

Unified · Split

2 files
  1. git-object/src/borrowed/tag.rs +7 −15
  2. git-object/src/borrowed/util.rs +8 −8
git-object/src/borrowed/tag.rs+7−15
@@ -34,27 +34,19 @@ fn is_hex_digit_lc(b: u8) -> bool { · 33 unmodified lines
3434 }
3535
3636 pub(crate) fn parse(i: &[u8]) -> IResult<&[u8], Tag, Error> {
37− let (i, target) = parse_oneline_header(b"object")(i)
38− .map_err(Error::context("object <40 lowercase hex char>"))?;
39− // let (i, target) = terminated(
40− // preceded(
41− // tag(b"object "),
42− // take_while_m_n(40usize, 40, is_hex_digit_lc),
43− // ),
44− // tag(NL),
45− // )(i)
46− // .map_err(Error::context("object <40 lowercase hex char>"))?;
37+ let (i, target) =
38+ parse_oneline_header(i, b"object", take_while_m_n(40usize, 40, is_hex_digit_lc))
39+ .map_err(Error::context("object <40 lowercase hex char>"))?;
4740
48− let (i, kind) = terminated(preceded(tag(b"type "), take_while1(is_alphabetic)), tag(NL))(i)
41+ let (i, kind) = parse_oneline_header(i, b"type", take_while1(is_alphabetic))
4942 .map_err(Error::context("type <object kind>"))?;
5043 let kind =
5144 crate::Kind::from_bytes(kind).map_err(|e| nom::Err::Error(Error::ParseKindError(e)))?;
5245
53− let (i, tag_version) =
54− terminated(preceded(tag(b"tag "), take_while1(|b| b != NL[0])), tag(NL))(i)
55− .map_err(Error::context("tag <version>"))?;
46+ let (i, tag_version) = parse_oneline_header(i, b"tag", take_while1(|b| b != NL[0]))
47+ .map_err(Error::context("tag <version>"))?;
5648
57− let (i, signature) = terminated(preceded(tag(b"tagger "), parse_signature), tag(NL))(i)
49+ let (i, signature) = parse_oneline_header(i, b"tagger", parse_signature)
5850 .map_err(Error::context("tagger <signature>"))?;
5951 let (i, (message, pgp_signature)) = all_consuming(parse_message)(i)?;
6052 Ok((
git-object/src/borrowed/util.rs+8−8
@@ -14,15 +14,15 @@ use nom::{ · 13 unmodified lines
1414 pub(crate) const NL: &[u8] = b"\n";
1515 pub(crate) const SPACE: &[u8] = b" ";
1616
17−pub(crate) fn parse_oneline_header(
17+pub(crate) fn parse_oneline_header<'a, T>(
18+ i: &'a [u8],
1819 name: &'static [u8],
19−) -> impl Fn(&[u8]) -> IResult<&[u8], &[u8], Error> {
20− move |i: &[u8]| {
21− terminated(
22− preceded(terminated(tag(name), tag(SPACE)), take_until(NL)),
23− tag(NL),
24− )(i)
25− }
20+ parse_value: impl Fn(&'a [u8]) -> IResult<&'a [u8], T, Error>,
21+) -> IResult<&'a [u8], T, Error> {
22+ terminated(
23+ preceded(terminated(tag(name), tag(SPACE)), parse_value),
24+ tag(NL),
25+ )(i)
2626 }
2727
2828 pub(crate) fn parse_signature(i: &[u8]) -> IResult<&[u8], Signature, Error> {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t