1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use std::{fmt, str}; use crate::records::extension::ExtensionDefRecord; use crate::util::ParseError; #[derive(Debug, PartialEq, Eq)] pub struct JRecord<'a>(pub ExtensionDefRecord<'a>); impl<'a> JRecord<'a> { pub fn parse(line: &'a str) -> Result<Self, ParseError> { let first_byte = line.as_bytes()[0]; assert!(first_byte == b'J'); Ok(JRecord(ExtensionDefRecord::parse(line)?)) } } impl<'a> fmt::Display for JRecord<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { self.0.fmt(f, 'J') } } #[cfg(test)] mod tests { use super::*; use crate::records::extension::Extension; #[test] fn jrecord_format() { let expected_string = "J033638FXA3941ENL4246TAS"; let record = JRecord(ExtensionDefRecord { num_extensions: 3, extensions: vec![ Extension::new("FXA", 36, 38), Extension::new("ENL", 39, 41), Extension::new("TAS", 42, 46), ], }); assert_eq!(format!("{}", record), expected_string); } }