pub struct VcfReader { /* private fields */ }Expand description
VCF file reader (streaming, memory-efficient)
The only way to create a VcfReader is VcfReader::from_path().
This is intentionally simple - there’s one obvious way to read a VCF file.
Implementations§
Source§impl VcfReader
impl VcfReader
Sourcepub fn from_path<P: AsRef<Path>>(path: P) -> Result<Self>
pub fn from_path<P: AsRef<Path>>(path: P) -> Result<Self>
Open a VCF file - handles .vcf and .vcf.gz automatically
§Memory Behavior
- Opens file handle (~8KB buffer)
- Parses header (~1-10KB typically)
- Does NOT load variants into memory
- Variants are parsed on-demand as you iterate
§Example
use genomicframe_core::formats::vcf::VcfReader;
use genomicframe_core::core::GenomicRecordIterator;
// Works with multi-GB files using only ~10KB RAM
let mut reader = VcfReader::from_path("variants.vcf.gz")?;
while let Some(variant) = reader.next_record()? {
if variant.is_pass() {
println!("{:?}", variant);
}
}Sourcepub fn annotate_with(self, index: AnnotationIndex) -> AnnotatingIterator ⓘ
pub fn annotate_with(self, index: AnnotationIndex) -> AnnotatingIterator ⓘ
Create an annotating iterator that enriches variants with genomic context
This is the ergonomic way to annotate variants from BED files, GFF files, etc.
§Example
use genomicframe_core::formats::vcf::VcfReader;
use genomicframe_core::interval::annotation::AnnotationIndex;
// Load gene annotations
let genes = AnnotationIndex::from_bed("genes.bed", |r| {
r.name.clone().unwrap_or_default()
})?;
// Annotate variants as they're read
let mut reader = VcfReader::from_path("variants.vcf.gz")?;
for annotated in reader.annotate_with(genes) {
let annotated = annotated?;
if annotated.is_annotated() {
println!("{:?} overlaps {}", annotated.record.position(),
annotated.all_annotations().join(", "));
}
}Trait Implementations§
Source§impl GenomicReader for VcfReader
impl GenomicReader for VcfReader
Auto Trait Implementations§
impl Freeze for VcfReader
impl !RefUnwindSafe for VcfReader
impl !Send for VcfReader
impl !Sync for VcfReader
impl Unpin for VcfReader
impl UnsafeUnpin for VcfReader
impl !UnwindSafe for VcfReader
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filter<F>(self, filter: F) -> FilteredReader<Self::Record, Self, F>where
F: RecordFilter<Self::Record>,
fn filter<F>(self, filter: F) -> FilteredReader<Self::Record, Self, F>where
F: RecordFilter<Self::Record>,
Apply a filter to this reader Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more