diff --git a/Cargo.lock b/Cargo.lock index 3792af0..d845798 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -887,7 +887,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fqkit" -version = "0.4.9" +version = "0.4.10" dependencies = [ "anyhow", "atty", diff --git a/Cargo.toml b/Cargo.toml index 7156789..379bcf2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fqkit" -version = "0.4.9" +version = "0.4.10" edition = "2021" authors = ["sharkLoc "] rust-version = "1.77.2" diff --git a/README.md b/README.md index 6eb2c7a..ae475b4 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ cargo install --git https://github.com/sharkLoc/fqkit.git ```bash FqKit -- A simple and cross-platform program for fastq file manipulation -Version: 0.4.9 +Version: 0.4.10 Authors: sharkLoc Source code: https://github.com/sharkLoc/fqkit.git diff --git a/src/cli/barcode.rs b/src/cli/barcode.rs index 1f2e036..77e1aca 100644 --- a/src/cli/barcode.rs +++ b/src/cli/barcode.rs @@ -15,7 +15,7 @@ fn barcode_list(file: &String, rev_comp: bool) -> Result info!("reading from barcode list file: {}", file); if rev_comp { - for line in fp.lines().map_while(std::io::Result::ok) { + for line in fp.lines().map_while(Result::ok) { let item = line.split('\t').collect::>(); // barcode => sample let bar: String = item[0] .chars() @@ -42,7 +42,7 @@ fn barcode_list(file: &String, rev_comp: bool) -> Result error_flag = ""; } } else { - for line in fp.lines().map_while(std::io::Result::ok) { + for line in fp.lines().map_while(Result::ok) { let item = line.split('\t').collect::>(); let bar: String = item[0] .chars() diff --git a/src/cli/check.rs b/src/cli/check.rs index 7ab214b..9103cf5 100644 --- a/src/cli/check.rs +++ b/src/cli/check.rs @@ -22,7 +22,7 @@ pub fn check_fastq( if save { let mut out_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; - for rec in fp_reader.records().flatten() { + for rec in fp_reader.records().map_while(Result::ok) { total += 1; match rec.check() { Ok(_) => { @@ -37,7 +37,7 @@ pub fn check_fastq( } out_writer.flush()?; } else { - for rec in fp_reader.records().flatten() { + for rec in fp_reader.records().map_while(Result::ok) { total += 1; match rec.check() { Ok(_) => { diff --git a/src/cli/concat.rs b/src/cli/concat.rs index 34979fc..eebf792 100644 --- a/src/cli/concat.rs +++ b/src/cli/concat.rs @@ -46,8 +46,8 @@ pub fn concat_fqstq_lane( let fq_reader2 = file_reader(Some(pe.1)).map(fastq::Reader::new)?; for (rec1, rec2) in fq_reader1 .records() - .flatten() - .zip(fq_reader2.records().flatten()) + .map_while(Result::ok) + .zip(fq_reader2.records().map_while(Result::ok)) { out_writer1.write_record(&rec1)?; out_writer2.write_record(&rec2)?; diff --git a/src/cli/cutadapter.rs b/src/cli/cutadapter.rs index 9108c28..a75747d 100644 --- a/src/cli/cutadapter.rs +++ b/src/cli/cutadapter.rs @@ -26,7 +26,7 @@ pub fn cut_adapter( let mut seqs = HashMap::new(); let iters = seqfile_reader.records(); - for rec in iters.flatten() { + for rec in iters.map_while(Result::ok) { //while let Some(each) = iters.next() { //let rec = each?; if seqs.contains_key(rec.id()) { diff --git a/src/cli/filter.rs b/src/cli/filter.rs index 637a799..d1ec29a 100644 --- a/src/cli/filter.rs +++ b/src/cli/filter.rs @@ -48,7 +48,7 @@ pub fn filter_fastq( for (rec1, rec2) in fq_reader1 .records() .flatten() - .zip(fq_reader2.records().flatten()) + .zip(fq_reader2.records().map_while(Result::ok)) { if rec1.seq().iter().filter(|v| v == &&b'N').count() > nbase || rec2.seq().iter().filter(|v| v == &&b'N').count() > nbase @@ -117,8 +117,8 @@ pub fn filter_fastq( let pe_vec: Vec<_> = fq_iter1 .by_ref() .take(chunk) - .flatten() - .zip(fq_iter2.by_ref().take(chunk).flatten()) + .map_while(Result::ok) + .zip(fq_iter2.by_ref().take(chunk).map_while(Result::ok)) .collect(); if pe_vec.is_empty() { break; diff --git a/src/cli/flatten.rs b/src/cli/flatten.rs index 180612c..223b424 100644 --- a/src/cli/flatten.rs +++ b/src/cli/flatten.rs @@ -33,7 +33,7 @@ pub fn flatten_fq( let fields = get_flag(flag); let mut out_writer = file_writer(out, compression_level)?; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let read = [rec.id().as_bytes(), rec.seq(), "+".as_bytes(), rec.qual()]; let res = fields.iter().map(|idx| read[*idx]).collect::>(); diff --git a/src/cli/fq2fa.rs b/src/cli/fq2fa.rs index 2994442..e2606a6 100644 --- a/src/cli/fq2fa.rs +++ b/src/cli/fq2fa.rs @@ -23,7 +23,7 @@ pub fn fq2fa( let mut fo = fasta::Writer::new(file_writer(out, compression_level)?); if remove { - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { num += 1; fo.write(rec.id(), None, rec.seq())?; } diff --git a/src/cli/fq2sam.rs b/src/cli/fq2sam.rs index 78455cd..a0c095e 100644 --- a/src/cli/fq2sam.rs +++ b/src/cli/fq2sam.rs @@ -47,7 +47,11 @@ pub fn fastq2sam( if let Some(r2) = r2 { let fq1 = file_reader(Some(r1)).map(fastq::Reader::new)?; let fq2 = file_reader(Some(r2)).map(fastq::Reader::new)?; - for (rec1, rec2) in fq1.records().flatten().zip(fq2.records().flatten()) { + for (rec1, rec2) in fq1 + .records() + .map_while(Result::ok) + .zip(fq2.records().map_while(Result::ok)) + { sam.write_fmt(format_args!( "{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\tRG:Z:{}\n", rec1.id(), @@ -81,7 +85,7 @@ pub fn fastq2sam( } } else { let fq = file_reader(Some(r1)).map(fastq::Reader::new)?; - for rec in fq.records().flatten() { + for rec in fq.records().map_while(Result::ok) { sam.write_fmt(format_args!( "{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\tRG:Z:{}\n", rec.id(), diff --git a/src/cli/fqscore.rs b/src/cli/fqscore.rs index f893259..33f2b92 100644 --- a/src/cli/fqscore.rs +++ b/src/cli/fqscore.rs @@ -37,7 +37,7 @@ pub fn phred_score( } let mut fq_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let mut qual = vec![]; if to33 { for q in rec.qual() { diff --git a/src/cli/gcplot.rs b/src/cli/gcplot.rs index 88985be..651867e 100644 --- a/src/cli/gcplot.rs +++ b/src/cli/gcplot.rs @@ -32,7 +32,7 @@ pub fn gc_content( let mut fo = file_writer(output, compression_level)?; let mut df_hash = HashMap::new(); - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let gc_count = rec .seq() .iter() diff --git a/src/cli/grep.rs b/src/cli/grep.rs index 7b40843..eeb2867 100644 --- a/src/cli/grep.rs +++ b/src/cli/grep.rs @@ -26,7 +26,7 @@ pub fn grep_fastq( let mut ids = vec![]; let fp_id = file_reader(Some(list))?; info!("reading reads id from file: {}", list); - for id in fp_id.lines().map_while(std::io::Result::ok) { + for id in fp_id.lines().map_while(Result::ok) { ids.push(id); } if ids.is_empty() { @@ -40,7 +40,7 @@ pub fn grep_fastq( info!("reads write to stdout"); } let mut fo = file_writer(out, compression_level).map(fastq::Writer::new)?; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let name = if full_name { if let Some(desc) = rec.desc() { format!("{} {}", rec.id(), desc) diff --git a/src/cli/kmer.rs b/src/cli/kmer.rs index 34d698f..0cb7b96 100644 --- a/src/cli/kmer.rs +++ b/src/cli/kmer.rs @@ -23,11 +23,11 @@ pub fn kmer_count( let mut writer = file_writer(output, compression_level)?; let mut kmers = HashMap::new(); - for rec in reader.records().flatten() { + for rec in reader.records().map_while(Result::ok) { let (mut sidx, mut eidx) = (0, kmer_len); let khash = nthash(rec.seq(), kmer_len); let len = rec.seq().len(); - + while eidx <= len { let kseq = &rec.seq()[sidx..eidx]; let khash_this = nthash(kseq, kmer_len)[0]; diff --git a/src/cli/length.rs b/src/cli/length.rs index 8739827..0f73b4b 100644 --- a/src/cli/length.rs +++ b/src/cli/length.rs @@ -23,7 +23,7 @@ pub fn fq_length( } let mut fo = file_writer(out, compression_level)?; - for rec in fp_reader.records().flatten() { + for rec in fp_reader.records().map_while(Result::ok) { let rlen = rec.seq().len(); *reads_len.entry(rlen).or_insert(0usize) += 1; total += 1; diff --git a/src/cli/mask.rs b/src/cli/mask.rs index 8d8bb6d..692e899 100644 --- a/src/cli/mask.rs +++ b/src/cli/mask.rs @@ -25,7 +25,7 @@ pub fn mask_fastq( info!("mask low quality bases with: {}", nt); let mut fp_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; - for rec in fp_reader.records().flatten() { + for rec in fp_reader.records().map_while(Result::ok) { let score_min = rec.qual().iter().min().unwrap() - phred; if score_min > qual_limit { fp_writer.write_record(&rec)?; diff --git a/src/cli/merge.rs b/src/cli/merge.rs index 678d407..5672d67 100644 --- a/src/cli/merge.rs +++ b/src/cli/merge.rs @@ -21,8 +21,8 @@ pub fn interleaved( let mut fq_writer = fastq::Writer::new(file_writer(out, compression_level)?); for (rec1, rec2) in fq1_reader .records() - .flatten() - .zip(fq2_reader.records().flatten()) + .map_while(Result::ok) + .zip(fq2_reader.records().map_while(Result::ok)) { num += 1; fq_writer.write(rec1.id(), rec1.desc(), rec1.seq(), rec1.qual())?; diff --git a/src/cli/plot.rs b/src/cli/plot.rs index 76ef6ba..84197ec 100644 --- a/src/cli/plot.rs +++ b/src/cli/plot.rs @@ -16,7 +16,7 @@ pub fn cycle_data(file: Option<&String>) -> Result>> { cyc.push(BTreeMap::new()); } - for (idx, line) in fp.lines().map_while(std::io::Result::ok).enumerate() { + for (idx, line) in fp.lines().map_while(Result::ok).enumerate() { if idx == 0 { continue; } diff --git a/src/cli/range.rs b/src/cli/range.rs index d408b3a..2724826 100644 --- a/src/cli/range.rs +++ b/src/cli/range.rs @@ -23,7 +23,12 @@ pub fn range_fastq( info!("get {} records", take); let mut fp_writer = file_writer(output, compression_level).map(fastq::Writer::new)?; - for rec in fp_reader.records().skip(skip).take(take).flatten() { + for rec in fp_reader + .records() + .skip(skip) + .take(take) + .map_while(Result::ok) + { fp_writer.write_record(&rec)?; } fp_writer.flush()?; diff --git a/src/cli/remove.rs b/src/cli/remove.rs index 0650b63..c68630f 100644 --- a/src/cli/remove.rs +++ b/src/cli/remove.rs @@ -39,7 +39,7 @@ pub fn remove_read( let mut fq_writer = fastq::Writer::new(file_writer(out, compression_level)?); if rm { - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { if !ids.contains(&rec.id().to_string()) { fq_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?; } @@ -47,7 +47,7 @@ pub fn remove_read( fq_writer.flush()?; } else { let mut rm_writer = fastq::Writer::new(file_writer(Some(save), compression_level)?); - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { if !ids.contains(&rec.id().to_string()) { fq_writer.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?; } else { diff --git a/src/cli/rename.rs b/src/cli/rename.rs index d24f253..9c2a310 100644 --- a/src/cli/rename.rs +++ b/src/cli/rename.rs @@ -26,7 +26,7 @@ pub fn rename_fastq( let mut n: usize = 0; if let Some(pre) = prefix { - for rec in fp.records().flatten() { + for rec in fp.records().map_while(Result::ok) { n += 1; /*let newid = match label { Some(x) => { @@ -53,7 +53,7 @@ pub fn rename_fastq( } fo.flush()?; } else { - for rec in fp.records().flatten() { + for rec in fp.records().map_while(Result::ok) { n += 1; /*let newid = if let Some(x) = label { if before { diff --git a/src/cli/reverse.rs b/src/cli/reverse.rs index e48eebb..f81d4ca 100644 --- a/src/cli/reverse.rs +++ b/src/cli/reverse.rs @@ -29,7 +29,7 @@ pub fn reverse_comp_seq( ]); let mut out_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let rev_seq = rec.seq().iter().copied().rev().collect::>(); let rev_qual = rec.qual().iter().copied().rev().collect::>(); diff --git a/src/cli/search.rs b/src/cli/search.rs index 82ab151..2e915d2 100644 --- a/src/cli/search.rs +++ b/src/cli/search.rs @@ -54,7 +54,7 @@ pub fn search_fq( .case_insensitive(case) .build() .unwrap(); - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let fq_str = std::str::from_utf8(rec.seq()).unwrap(); if invert_match { if !re.is_match(fq_str) { @@ -71,7 +71,7 @@ pub fn search_fq( let (tx, rx) = unbounded(); let mut fqiter = fq_reader.records(); loop { - let chunks: Vec<_> = fqiter.by_ref().take(chunk).flatten().collect(); + let chunks: Vec<_> = fqiter.by_ref().take(chunk).map_while(Result::ok).collect(); if chunks.is_empty() { break; } diff --git a/src/cli/select.rs b/src/cli/select.rs index 8f4954f..accd7cf 100644 --- a/src/cli/select.rs +++ b/src/cli/select.rs @@ -20,11 +20,11 @@ pub fn select_pe_fastq( info!("read forward reads from file: {}", fq1); info!("read reverse reads from file: {}", fq2); - for rec in fq_reader1.records().flatten() { + for rec in fq_reader1.records().map_while(Result::ok) { let k = rec.id().to_owned(); read1_id.entry(k).or_insert(()); } - for rec in fq_reader2.records().flatten() { + for rec in fq_reader2.records().map_while(Result::ok) { let k = rec.id().to_owned(); read2_id.entry(k).or_insert(()); } @@ -35,7 +35,7 @@ pub fn select_pe_fastq( let (mut pe_r1, mut pe_r2) = (0usize, 0usize); let fq_reader1 = file_reader(Some(fq1)).map(fastq::Reader::new)?; - for rec in fq_reader1.records().flatten() { + for rec in fq_reader1.records().map_while(Result::ok) { if read1_id.contains_key(rec.id()) && read2_id.contains_key(rec.id()) { pe_r1 += 1; out_writer1.write_record(&rec)?; @@ -44,7 +44,7 @@ pub fn select_pe_fastq( out_writer1.flush()?; let fq_reader2 = file_reader(Some(fq2)).map(fastq::Reader::new)?; - for rec in fq_reader2.records().flatten() { + for rec in fq_reader2.records().map_while(Result::ok) { if read2_id.contains_key(rec.id()) && read1_id.contains_key(rec.id()) { pe_r2 += 1; out_writer2.write_record(&rec)?; diff --git a/src/cli/shuffle.rs b/src/cli/shuffle.rs index 4eaed0b..afc7ce7 100644 --- a/src/cli/shuffle.rs +++ b/src/cli/shuffle.rs @@ -24,7 +24,7 @@ pub fn shuffle_fastq( info!("rand seed: {}", seed); let mut vec_reads = vec![]; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { vec_reads.push(rec); } diff --git a/src/cli/size.rs b/src/cli/size.rs index 4b8df23..685a5bc 100644 --- a/src/cli/size.rs +++ b/src/cli/size.rs @@ -65,7 +65,7 @@ pub fn size_fastq( let mut bases = 0usize; if ncpu == 0 || ncpu == 1 { - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { base.read += 1; for nt in rec.seq().iter() { match *nt { @@ -83,7 +83,7 @@ pub fn size_fastq( let (tx, rx) = unbounded(); let mut fqiter = fq_reader.records(); loop { - let chunk: Vec<_> = fqiter.by_ref().take(chunk).flatten().collect(); + let chunk: Vec<_> = fqiter.by_ref().take(chunk).map_while(Result::ok).collect(); if chunk.is_empty() { break; } diff --git a/src/cli/slide.rs b/src/cli/slide.rs index 84b33a7..9c45e92 100644 --- a/src/cli/slide.rs +++ b/src/cli/slide.rs @@ -24,7 +24,7 @@ pub fn slide_fastq( info!("step size: {}", step); let mut fq_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; let mut window = wind; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { let seq = rec.seq(); let qual = rec.qual(); let len = seq.len(); diff --git a/src/cli/sort.rs b/src/cli/sort.rs index d12309a..ab50443 100644 --- a/src/cli/sort.rs +++ b/src/cli/sort.rs @@ -50,7 +50,7 @@ pub fn sort_fastq( } let mut vec_reads = vec![]; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { vec_reads.push(rec); } info!("all records has been readed into memory, start sort ..."); diff --git a/src/cli/split.rs b/src/cli/split.rs index 9a137da..f75c302 100644 --- a/src/cli/split.rs +++ b/src/cli/split.rs @@ -63,7 +63,7 @@ pub fn split_interleaved( let mut num = 0usize; let mut flag = true; - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { num += 1; if flag { fh1.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?; diff --git a/src/cli/split2.rs b/src/cli/split2.rs index b24819f..0e12d1b 100644 --- a/src/cli/split2.rs +++ b/src/cli/split2.rs @@ -59,7 +59,7 @@ pub fn split_chunk( )?)]; info!("start to write file: {:?}", out); - for rec in fq_reader.records().flatten() { + for rec in fq_reader.records().map_while(Result::ok) { if flag < num { let fhthis = fh.get_mut(index).unwrap(); fhthis.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?; diff --git a/src/cli/stats.rs b/src/cli/stats.rs index 0a59029..98b08bd 100644 --- a/src/cli/stats.rs +++ b/src/cli/stats.rs @@ -118,7 +118,7 @@ pub fn stat_fq( let mut max_qva = 0; let mut min_len: Option = None; let mut each: HashMap> = HashMap::new(); - for rec in fq.records().flatten() { + for rec in fq.records().map_while(Result::ok) { let this_q = *rec.qual().iter().max().unwrap() - phred; if this_q > max_qva { max_qva = this_q; diff --git a/src/cli/subfq.rs b/src/cli/subfq.rs index b174e83..1808ee0 100644 --- a/src/cli/subfq.rs +++ b/src/cli/subfq.rs @@ -29,7 +29,7 @@ fn select_fastq( info!("subseq number: {}", n); info!("reduce much memory but cost more time"); - for (order, _) in fq_reader.records().flatten().enumerate() { + for (order, _) in fq_reader.records().map_while(Result::ok).enumerate() { if order < n { get.push(order); } else { @@ -43,7 +43,7 @@ fn select_fastq( let fo = file_writer(out, compression_level)?; let mut w = fastq::Writer::new(fo); let fq_reader2 = fastq::Reader::new(file_reader(file)?); - for (order, rec) in fq_reader2.records().flatten().enumerate() { + for (order, rec) in fq_reader2.records().map_while(Result::ok).enumerate() { if get.contains(&order) { w.write(rec.id(), rec.desc(), rec.seq(), rec.qual())?; } @@ -76,7 +76,7 @@ fn select_fastq2( let mut get: Vec = Vec::with_capacity(n); let fq_reader = fastq::Reader::new(file_reader(file)?); - for (order, rec) in fq_reader.records().flatten().enumerate() { + for (order, rec) in fq_reader.records().map_while(Result::ok).enumerate() { if order < n { get.push(rec); } else { diff --git a/src/cli/tail.rs b/src/cli/tail.rs index 88496ab..f0768de 100644 --- a/src/cli/tail.rs +++ b/src/cli/tail.rs @@ -31,7 +31,7 @@ pub fn tail_n_records( let skip_n = total - number; let fp2 = fastq::Reader::new(file_reader(input)?); - for rec in fp2.records().skip(skip_n).flatten() { + for rec in fp2.records().skip(skip_n).map_while(Result::ok) { fo.write_record(&rec)?; } } else { diff --git a/src/cli/top.rs b/src/cli/top.rs index 080b50a..6820775 100644 --- a/src/cli/top.rs +++ b/src/cli/top.rs @@ -21,7 +21,7 @@ pub fn top_n_records( info!("get top {} records", number); let mut fo = fastq::Writer::new(file_writer(output, compression_level)?); - for rec in fp.records().take(number).flatten() { + for rec in fp.records().take(number).map_while(Result::ok) { fo.write_record(&rec)?; } fo.flush()?; diff --git a/src/cli/trimfq.rs b/src/cli/trimfq.rs index 07c9565..2e80fd1 100644 --- a/src/cli/trimfq.rs +++ b/src/cli/trimfq.rs @@ -23,7 +23,7 @@ pub fn trim_fq( } let mut fq_writer = fastq::Writer::new(file_writer(out, compression_level)?); - for (idx, rec) in fq_reader.records().flatten().enumerate() { + for (idx, rec) in fq_reader.records().map_while(Result::ok).enumerate() { let rlen = rec.seq().len(); if left >= rlen || right >= rlen || length >= rlen { warn!( diff --git a/src/cli/view.rs b/src/cli/view.rs index c45511a..836738f 100644 --- a/src/cli/view.rs +++ b/src/cli/view.rs @@ -17,7 +17,7 @@ pub fn view_fq(file: Option<&String>, out: Option<&String>, compression_level: u let fq_reader = file_reader(file).map(fastq::Reader::new)?; let mut fq_writer = file_writer(out, compression_level).map(fastq::Writer::new)?; - let mut iter_fq = fq_reader.records().flatten().peekable(); + let mut iter_fq = fq_reader.records().map_while(Result::ok).peekable(); let (mut page, mut start, mut end) = (0usize, 1usize, 0usize); loop { diff --git a/src/command.rs b/src/command.rs index 9b8baf8..a6d701b 100644 --- a/src/command.rs +++ b/src/command.rs @@ -4,7 +4,7 @@ use clap::{value_parser, ArgAction, Parser}; #[command( name = "FqKit", author = "sharkLoc", - version = "0.4.9", + version = "0.4.10", about = "A simple and cross-platform program for fastq file manipulation", long_about = None, next_line_help = false,