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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use crate::{value, values, File};
use bstr::BStr;
use std::borrow::Cow;
use std::convert::TryFrom;
impl<'a> File<'a> {
pub fn string(&'a self, section_name: &str, subsection_name: Option<&str>, key: &str) -> Option<Cow<'a, BStr>> {
self.raw_value(section_name, subsection_name, key)
.ok()
.map(|v| values::String::from(v).value)
}
pub fn path(&'a self, section_name: &str, subsection_name: Option<&str>, key: &str) -> Option<values::Path<'a>> {
self.raw_value(section_name, subsection_name, key)
.ok()
.map(values::Path::from)
}
pub fn boolean(
&'a self,
section_name: &str,
subsection_name: Option<&str>,
key: &str,
) -> Option<Result<bool, value::parse::Error>> {
self.raw_value(section_name, subsection_name, key)
.ok()
.map(|v| values::Boolean::try_from(v).map(|b| b.to_bool()))
}
pub fn integer(
&'a self,
section_name: &str,
subsection_name: Option<&str>,
key: &str,
) -> Option<Result<i64, value::parse::Error>> {
let int = self.raw_value(section_name, subsection_name, key).ok()?;
Some(values::Integer::try_from(int.as_ref()).and_then(|b| {
b.to_decimal()
.ok_or_else(|| value::parse::Error::new("Integer overflow", int.into_owned()))
}))
}
pub fn strings(&self, section_name: &str, subsection_name: Option<&str>, key: &str) -> Option<Vec<Cow<'_, BStr>>> {
self.raw_multi_value(section_name, subsection_name, key)
.ok()
.map(|values| values.into_iter().map(|v| values::String::from(v).value).collect())
}
pub fn integers(
&self,
section_name: &str,
subsection_name: Option<&str>,
key: &str,
) -> Option<Result<Vec<i64>, value::parse::Error>> {
self.raw_multi_value(section_name, subsection_name, key)
.ok()
.map(|values| {
values
.into_iter()
.map(|v| {
values::Integer::try_from(v.as_ref()).and_then(|int| {
int.to_decimal()
.ok_or_else(|| value::parse::Error::new("Integer overflow", v.into_owned()))
})
})
.collect()
})
}
}