From 2d1d38644523f3eeb6ea327cd6eb813b39141f74 Mon Sep 17 00:00:00 2001 From: Michael Macias Date: Sat, 18 May 2024 19:03:20 -0500 Subject: [PATCH] gff/examples: Add query example --- noodles-gff/examples/gff_query.rs | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 noodles-gff/examples/gff_query.rs diff --git a/noodles-gff/examples/gff_query.rs b/noodles-gff/examples/gff_query.rs new file mode 100644 index 000000000..c2f0d06af --- /dev/null +++ b/noodles-gff/examples/gff_query.rs @@ -0,0 +1,36 @@ +//! Queries a bgzip-compressed GFF file with a given region. +//! +//! The input must have an associated coordinate-sorted index (CSI) in the same directory. +//! +//! The result matches the output of `tabix `. + +use std::{env, fs::File, io}; + +use noodles_bgzf as bgzf; +use noodles_csi as csi; +use noodles_gff as gff; + +fn main() -> Result<(), Box> { + let mut args = env::args().skip(1); + let src = args.next().expect("missing src"); + let region = args.next().expect("missing region").parse()?; + + let index_src = format!("{src}.csi"); + let index = csi::read(index_src)?; + + let mut reader = File::open(src) + .map(bgzf::Reader::new) + .map(gff::io::Reader::new)?; + + let query = reader.query(&index, ®ion)?; + + let stdout = io::stdout().lock(); + let mut writer = gff::io::Writer::new(stdout); + + for result in query { + let record = result?; + writer.write_record(&record)?; + } + + Ok(()) +}