gff.rs 829 B

1234567891011121314151617181920212223242526272829
  1. use anyhow::Context;
  2. use noodles_gff as gff;
  3. use crate::{config::Config, positions::GenomeRange};
  4. use super::readers::get_gz_reader;
  5. pub fn features_ranges(feature_type: &str, config: &Config) -> anyhow::Result<Vec<GenomeRange>> {
  6. let path = &config.refseq_gff;
  7. let mut reader = get_gz_reader(path)
  8. .map(gff::io::Reader::new)
  9. .with_context(|| format!("Error while creating the reader of {path}"))?;
  10. let mut res = Vec::new();
  11. for result in reader.record_bufs() {
  12. let record = result?;
  13. let ty = record.ty();
  14. if ty != feature_type {
  15. continue;
  16. }
  17. res.push(GenomeRange::from_1_inclusive(
  18. record.reference_sequence_name(),
  19. record.start().get() as u32,
  20. record.end().get() as u32,
  21. ));
  22. }
  23. Ok(res)
  24. }