noodles_vcf/variant/record/info/field/
value.rs

1//! Variant record info field value.
2
3pub mod array;
4
5use std::{borrow::Cow, io};
6
7pub use self::array::Array;
8
9/// A variant record info field value.
10#[derive(Debug)]
11pub enum Value<'a> {
12    /// A 32-bit integer.
13    Integer(i32),
14    /// A single-precision floating-point.
15    Float(f32),
16    /// A boolean.
17    Flag,
18    /// A character.
19    Character(char),
20    /// A string.
21    String(Cow<'a, str>),
22    /// An array.
23    Array(Array<'a>),
24}
25
26impl<'a> TryFrom<Value<'a>> for crate::variant::record_buf::info::field::Value {
27    type Error = io::Error;
28
29    fn try_from(value: Value<'a>) -> Result<Self, Self::Error> {
30        match value {
31            Value::Integer(n) => Ok(Self::Integer(n)),
32            Value::Float(n) => Ok(Self::Float(n)),
33            Value::Flag => Ok(Self::Flag),
34            Value::Character(c) => Ok(Self::Character(c)),
35            Value::String(s) => Ok(Self::String(s.into())),
36            Value::Array(array) => array.try_into().map(Self::Array),
37        }
38    }
39}