noodles_sam/alignment/record/data/field/
value.rs1pub mod array;
4
5use std::io;
6
7use bstr::BStr;
8
9pub use self::array::Array;
10use super::Type;
11
12#[derive(Debug)]
14pub enum Value<'a> {
15 Character(u8),
17 Int8(i8),
19 UInt8(u8),
21 Int16(i16),
23 UInt16(u16),
25 Int32(i32),
27 UInt32(u32),
29 Float(f32),
31 String(&'a BStr),
33 Hex(&'a BStr),
35 Array(Array<'a>),
37}
38
39impl Value<'_> {
40 pub fn ty(&self) -> Type {
49 match self {
50 Self::Character(_) => Type::Character,
51 Self::Int8(_) => Type::Int8,
52 Self::UInt8(_) => Type::UInt8,
53 Self::Int16(_) => Type::Int16,
54 Self::UInt16(_) => Type::UInt16,
55 Self::Int32(_) => Type::Int32,
56 Self::UInt32(_) => Type::UInt32,
57 Self::Float(_) => Type::Float,
58 Self::String(_) => Type::String,
59 Self::Hex(_) => Type::Hex,
60 Self::Array(_) => Type::Array,
61 }
62 }
63
64 pub fn as_int(&self) -> Option<i64> {
78 match self {
79 Self::Int8(n) => Some(i64::from(*n)),
80 Self::UInt8(n) => Some(i64::from(*n)),
81 Self::Int16(n) => Some(i64::from(*n)),
82 Self::UInt16(n) => Some(i64::from(*n)),
83 Self::Int32(n) => Some(i64::from(*n)),
84 Self::UInt32(n) => Some(i64::from(*n)),
85 _ => None,
86 }
87 }
88}
89
90impl<'a> TryFrom<Value<'a>> for crate::alignment::record_buf::data::field::Value {
91 type Error = io::Error;
92
93 fn try_from(value: Value<'a>) -> Result<Self, Self::Error> {
94 match value {
95 Value::Character(b) => Ok(Self::Character(b)),
96 Value::Int8(n) => Ok(Self::Int8(n)),
97 Value::UInt8(n) => Ok(Self::UInt8(n)),
98 Value::Int16(n) => Ok(Self::Int16(n)),
99 Value::UInt16(n) => Ok(Self::UInt16(n)),
100 Value::Int32(n) => Ok(Self::Int32(n)),
101 Value::UInt32(n) => Ok(Self::UInt32(n)),
102 Value::Float(n) => Ok(Self::Float(n)),
103 Value::String(s) => Ok(Self::String(s.into())),
104 Value::Hex(s) => Ok(Self::Hex(s.into())),
105 Value::Array(array) => array.try_into().map(Self::Array),
106 }
107 }
108}