use dna_parsing::base::Base; use dna_parsing::parser::Parser; use std::env; use std::fs; use std::io; use std::io::Write; fn main() { let args: Vec = env::args().collect(); if args.len() < 3 { println!("Usage: {} ", args[0]); return; } let Ok(dna) = fs::read_to_string(&args[1]) else { println!("Failed to read dna file at {}", &args[1]); return; }; let Ok(offset): Result = args[2].parse() else { println!("Failed to parse offset {}", &args[2]); return; }; let mut index = 0; loop { print!("> "); let _ = io::stdout().flush(); let mut line = String::new(); if !io::stdin().read_line(&mut line).is_ok() { println!("Failed to read response line"); return; } line = line.trim().to_string(); if !line.is_empty() { let Ok(new_index): Result = line.parse() else { println!("Failed to parse {}", line); continue; }; index = new_index; } let mut parser = Parser::new( dna[index + offset..] .chars() .filter_map(|c| Base::from_char(c)), ); let mut rna = Vec::new(); let Some(pattern) = parser.pattern(&mut rna) else { println!("Failed to parse pattern"); continue; }; let Some(template) = parser.template(&mut rna) else { println!("Failed to parse template"); continue; }; if !rna.is_empty() { println!("RNA output:"); for r in rna.iter() { let rna_str: String = r.iter().map(|b| b.to_char()).collect(); println!(" {}", rna_str); } println!(); } println!("{} ; {} ;", pattern, template); index += parser.index(); println!("Now at: {}", index); } }