From 60f8e11769864befc1f116f5f2896cdbf16609f1 Mon Sep 17 00:00:00 2001 From: John Turner Date: Thu, 23 Oct 2025 00:28:56 -0400 Subject: clone iterator in OneOf --- src/lib.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 83ead73..1de814c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,11 @@ -use core::{cmp::PartialEq, fmt, iter::Iterator, marker::Sized, ops::Range}; +use core::{ + clone::Clone, + cmp::PartialEq, + fmt, + iter::{IntoIterator, Iterator}, + marker::Sized, + ops::Range, +}; use crate::{ input::{Character, Input, InputIter}, @@ -427,7 +434,7 @@ impl Parser for OneOf where I: Input, I::Item: PartialEq, - It: Iterator, + It: IntoIterator + Clone, { type Output = I::Item; @@ -437,9 +444,13 @@ where ) -> ParserResult { Tracer::trace("oneof", it.clone()); + let start = it.clone(); + match it.next() { - Some((_, item)) if self.it.any(|i| item == i) => Ok((it, OM::bind(|| item))), - _ => Err(EM::bind(|| it)), + Some((_, item)) if self.it.clone().into_iter().any(|i| item == i) => { + Ok((it, OM::bind(|| item))) + } + _ => Err(EM::bind(|| start)), } } } @@ -448,7 +459,7 @@ pub fn one_of(it: It) -> impl Parser where I: Input, I::Item: PartialEq, - It: Iterator, + It: IntoIterator + Clone, { OneOf { it } } -- cgit v1.2.3