···
2
-
use crate::dna::DnaIterator;
3
-
use crate::dna::DnaRef;
use crate::pattern::Pattern;
use crate::pattern::PatternItem;
···
use crate::template::TemplateItem;
11
-
pub struct Parser<'a> {
12
-
iter: DnaIterator<'a>,
11
+
I: Iterator<Item = Base>,
17
-
impl<'a> Parser<'a> {
18
-
pub fn new(buf: &'a DnaRef) -> Parser<'a> {
20
+
I: Iterator<Item = Base>,
22
+
pub fn new(iter: I) -> Parser<I> {
···
196
+
fn dna_from_str(s: &str) -> Vec<Base> {
197
+
s.chars().filter_map(|c| Base::from_char(c)).collect()
194
-
let dna = DnaRef::from_string("ICFP");
195
-
let mut parser = Parser::new(&dna);
202
+
let dna = dna_from_str("ICFP").into_iter();
203
+
let mut parser = Parser::new(dna);
assert!(parser.next_is(&[Base::I]));
assert!(parser.next_is(&[Base::I, Base::C]));
assert!(parser.next_is(&[Base::I, Base::C, Base::F]));
···
204
-
let dna = DnaRef::from_string("CP");
205
-
let mut parser = Parser::new(&dna);
212
+
let dna = dna_from_str("CP").into_iter();
213
+
let mut parser = Parser::new(dna);
assert_eq!(parser.nat(), Some(1));
assert_eq!(parser.index, 2);
209
-
let dna = DnaRef::from_string("ICICP");
210
-
let mut parser = Parser::new(&dna);
217
+
let dna = dna_from_str("ICICP").into_iter();
218
+
let mut parser = Parser::new(dna);
assert_eq!(parser.nat(), Some(10));
assert_eq!(parser.index, 5);
214
-
let dna = DnaRef::from_string("III");
215
-
let mut parser = Parser::new(&dna);
222
+
let dna = dna_from_str("III").into_iter();
223
+
let mut parser = Parser::new(dna);
assert_eq!(parser.nat(), None);
assert_eq!(parser.index, 3);
222
-
let dna = DnaRef::from_string("CFPICIIC");
223
-
let mut parser = Parser::new(&dna);
230
+
let dna = dna_from_str("CFPICIIC").into_iter();
231
+
let mut parser = Parser::new(dna);
assert_eq!(parser.consts(), &[Base::I, Base::C, Base::F, Base::P]);
assert_eq!(parser.index, 5);
···
let mut rna = Vec::new();
232
-
let dna = DnaRef::from_string("CIIC");
233
-
let mut parser = Parser::new(&dna);
240
+
let dna = dna_from_str("CIIC").into_iter();
241
+
let mut parser = Parser::new(dna);
parser.pattern(&mut rna),
Some(vec![PatternItem::Base(Base::I)])
assert_eq!(parser.index, 4);
240
-
let dna = DnaRef::from_string("IIPIPICPIICICIIF");
241
-
let mut parser = Parser::new(&dna);
248
+
let dna = dna_from_str("IIPIPICPIICICIIF").into_iter();
249
+
let mut parser = Parser::new(dna);
parser.pattern(&mut rna),
···
assert_eq!(parser.index, 16);
253
-
let dna = DnaRef::from_string("IIIPFCICFPIIC");
254
-
let mut parser = Parser::new(&dna);
261
+
let dna = dna_from_str("IIIPFCICFPIIC").into_iter();
262
+
let mut parser = Parser::new(dna);
assert_eq!(parser.pattern(&mut rna), Some(vec![]));
assert_eq!(parser.index, 13);
···
let mut rna = Vec::new();
275
-
let dna = DnaRef::from_string("CFPICIFCPICPIIPIICPIIC");
276
-
let mut parser = Parser::new(&dna);
283
+
let dna = dna_from_str("CFPICIFCPICPIIPIICPIIC").into_iter();
284
+
let mut parser = Parser::new(dna);
parser.template(&mut rna),
···
assert_eq!(parser.index, 22);
290
-
let dna = DnaRef::from_string("IIIPFCICFPIIC");
291
-
let mut parser = Parser::new(&dna);
298
+
let dna = dna_from_str("IIIPFCICFPIIC").into_iter();
299
+
let mut parser = Parser::new(dna);
assert_eq!(parser.template(&mut rna), Some(vec![]));
assert_eq!(parser.index, 13);