ferroui_base/media/
font_feature_collection.rs1use crate::media::media_collection::media_collection_type;
2use crate::media::{FontFeature, MediaCollection};
3use crate::utilities::{FormatError, SpanStringTokenizer};
4
5media_collection_type!(
6 FontFeatureCollection,
10 FontFeature
11);
12
13impl FontFeatureCollection {
14 pub fn new() -> Self {
16 Self(MediaCollection::new())
17 }
18
19 pub fn from_items(font_features: impl IntoIterator<Item = FontFeature>) -> Self {
21 Self(MediaCollection::from_items(font_features))
22 }
23
24 pub fn parse(s: &str) -> Result<FontFeatureCollection, FormatError> {
26 let mut features = Vec::new();
27
28 SpanStringTokenizer::with_message(s, "Invalid font feature specification.").scope(|tokenizer| {
29 while let Some(token) = tokenizer.try_read_span()? {
30 features.push(FontFeature::parse(token));
31 }
32 Ok(())
33 })?;
34
35 Ok(FontFeatureCollection::from_items(features))
36 }
37}