Implement nom::sequence::Tuple
for ()
(Unit)
#1526
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Right now,
()
(Unit) does not implement thenom::sequence::Tuple
trait required to use thetuple
combinator. This makes it difficult to use in macros.Example
I'm currently mass-producing parsers using a macro for a fictional instruction set assembler. Each instruction may take a variable number of arguments so I am using this macro component to parse all arguments:
This works fine for any number of arguments
>=1
and<=21
, but notably does not work for a number==0
. Here's why:Looks like
()
does not implementTuple
, even though it could concievably implement a tuple of zero elements.This pull request implements
Tuple
for()
such that it will always succeed and it is always a no-op. It also adds a test case that verifies thattuple(())
never fails and always returns the input unchanged.I am unsure if the
ParseError<I>
bound is needed on the impl, but I figured it's better to be safe than sorry and stay consistent with the existing tuple impls. I would also appreciate assistance with removing the ugly turbofishes from the test.