hts 0.1.17

Rust binding for htslib
Documentation
use crate::hts_ffi::{htslib_obj, BCF_DT_ID};
use std::ffi::CStr;

use super::VcfFile;
use crate::TypedValue;

pub struct VcfRecordInfo<'a> {
    inner: &'a htslib_obj::BcfInfo,
    file: &'a VcfFile,
}

impl<'a> VcfRecordInfo<'a> {
    pub(crate) fn from_inner(inner: &'a htslib_obj::BcfInfo, file: &'a VcfFile) -> Self {
        Self { inner, file }
    }

    pub fn key(&self) -> Option<&str> {
        let keyid = self.inner.key as isize;
        unsafe {
            let raw_name = (*self.file.header().id[BCF_DT_ID as usize].offset(keyid)).key;
            CStr::from_ptr(raw_name).to_str().ok()
        }
    }

    pub fn value(&self) -> TypedValue {
        TypedValue::from_type_and_raw_data(self.inner.type_, self.inner.vptr, self.inner.vptr_len)
    }
}