diff --git a/noodles-sam/src/header/parser.rs b/noodles-sam/src/header/parser.rs index f2aa9f31b..b409bc638 100644 --- a/noodles-sam/src/header/parser.rs +++ b/noodles-sam/src/header/parser.rs @@ -151,16 +151,16 @@ impl Parser { } fn extract_version(src: &[u8]) -> Option { + use self::record::value::map::header::parse_version; + const RECORD_PREFIX: &[u8] = b"@HD\t"; const DELIMITER: u8 = b'\t'; const FIELD_PREFIX: &[u8] = b"VN:"; if let Some(raw_value) = src.strip_prefix(RECORD_PREFIX) { for raw_field in raw_value.split(|&b| b == DELIMITER) { - if let Some(raw_version) = raw_field.strip_prefix(FIELD_PREFIX) { - return str::from_utf8(raw_version) - .ok() - .and_then(|s| s.parse().ok()); + if let Some(s) = raw_field.strip_prefix(FIELD_PREFIX) { + return parse_version(s).ok(); } } } diff --git a/noodles-sam/src/header/parser/record.rs b/noodles-sam/src/header/parser/record.rs index a5b244fca..27cf7400b 100644 --- a/noodles-sam/src/header/parser/record.rs +++ b/noodles-sam/src/header/parser/record.rs @@ -1,5 +1,5 @@ mod kind; -mod value; +pub(crate) mod value; use std::{error, fmt}; diff --git a/noodles-sam/src/header/parser/record/value.rs b/noodles-sam/src/header/parser/record/value.rs index f2c4254da..f7b3d4932 100644 --- a/noodles-sam/src/header/parser/record/value.rs +++ b/noodles-sam/src/header/parser/record/value.rs @@ -1,5 +1,5 @@ mod comment; -mod map; +pub(crate) mod map; use std::{error, fmt}; diff --git a/noodles-sam/src/header/parser/record/value/map/header.rs b/noodles-sam/src/header/parser/record/value/map/header.rs index 5072df06c..f74b4a936 100644 --- a/noodles-sam/src/header/parser/record/value/map/header.rs +++ b/noodles-sam/src/header/parser/record/value/map/header.rs @@ -4,7 +4,7 @@ use std::{error, fmt}; use bstr::{BStr, BString}; -use self::version::parse_version; +pub(crate) use self::version::parse_version; use super::field::{consume_delimiter, consume_separator, parse_tag, parse_value, value}; use crate::header::{ parser::Context, diff --git a/noodles-sam/src/header/parser/record/value/map/header/version.rs b/noodles-sam/src/header/parser/record/value/map/header/version.rs index 736f34e80..40275e614 100644 --- a/noodles-sam/src/header/parser/record/value/map/header/version.rs +++ b/noodles-sam/src/header/parser/record/value/map/header/version.rs @@ -2,7 +2,7 @@ use std::{error, fmt}; use crate::header::record::value::map::header::Version; -pub(super) fn parse_version(src: &[u8]) -> Result { +pub(crate) fn parse_version(src: &[u8]) -> Result { const DELIMITER: u8 = b'.'; fn split_once(buf: &[u8], delimiter: u8) -> Option<(&[u8], &[u8])> {