noodles_vcf/variant/record/
samples.rs1pub mod keys;
4mod sample;
5pub mod series;
6
7use std::io;
8
9pub use self::{sample::Sample, series::Series};
10use crate::Header;
11
12#[allow(clippy::tabs_in_doc_comments)]
13pub trait Samples {
39 fn is_empty(&self) -> bool;
41
42 fn len(&self) -> usize;
44
45 fn column_names<'a, 'h: 'a>(
47 &'a self,
48 header: &'h Header,
49 ) -> Box<dyn Iterator<Item = io::Result<&'a str>> + 'a>;
50
51 fn select<'a, 'h: 'a>(
53 &'a self,
54 header: &'h Header,
55 column_name: &str,
56 ) -> Option<io::Result<Box<dyn Series + 'a>>>;
57
58 fn series(&self) -> Box<dyn Iterator<Item = io::Result<Box<dyn Series + '_>>> + '_>;
60
61 fn iter(&self) -> Box<dyn Iterator<Item = Box<dyn Sample + '_>> + '_>;
63}
64
65impl Samples for Box<dyn Samples + '_> {
66 fn is_empty(&self) -> bool {
67 (**self).is_empty()
68 }
69
70 fn len(&self) -> usize {
71 (**self).len()
72 }
73
74 fn column_names<'a, 'h: 'a>(
75 &'a self,
76 header: &'h Header,
77 ) -> Box<dyn Iterator<Item = io::Result<&'a str>> + 'a> {
78 (**self).column_names(header)
79 }
80
81 fn select<'a, 'h: 'a>(
82 &'a self,
83 header: &'h Header,
84 column_name: &str,
85 ) -> Option<io::Result<Box<dyn Series + 'a>>> {
86 (**self).select(header, column_name)
87 }
88
89 fn series(&self) -> Box<dyn Iterator<Item = io::Result<Box<dyn Series + '_>>> + '_> {
90 (**self).series()
91 }
92
93 fn iter(&self) -> Box<dyn Iterator<Item = Box<dyn Sample + '_>> + '_> {
94 (**self).iter()
95 }
96}