diff --git a/src/bcf/record.rs b/src/bcf/record.rs index 2ebc87b97..0970529d7 100644 --- a/src/bcf/record.rs +++ b/src/bcf/record.rs @@ -200,6 +200,17 @@ impl Record { self.header.as_ref() } + /// Translate the record to the given header. + pub fn translate(&mut self, dst_header: &mut Arc) -> Result<()> { + if unsafe { htslib::bcf_translate(dst_header.inner, self.header().inner, self.inner) } == 0 + { + self.set_header(Arc::clone(dst_header)); + Ok(()) + } else { + Err(Error::BcfTranslate) + } + } + /// Set the record header. pub(crate) fn set_header(&mut self, header: Arc) { self.header = header; diff --git a/src/errors.rs b/src/errors.rs index 246b41736..1e3f10c41 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -135,6 +135,8 @@ pub enum Error { BcfRemoveAlleles, #[error("failed to render BCF record as string")] BcfToString, + #[error("failed to translate BCF/VCF record")] + BcfTranslate, #[error("invalid compression level {level}")] BgzfInvalidCompressionLevel { level: i8 },