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)
}
}