@@ -10,15 +10,15 @@ pub struct Parser {
10
10
11
11
fn type_from_value ( value : & KdlValue ) -> & ' static str {
12
12
match value {
13
- KdlValue :: RawString ( _) | KdlValue :: String ( _) => "string" ,
14
- KdlValue :: Null => "null" ,
13
+ KdlValue :: String ( _) => "string" ,
14
+ KdlValue :: Integer ( _) => "integer" ,
15
+ KdlValue :: Float ( _) => "float" ,
15
16
KdlValue :: Bool ( _) => "boolean" ,
16
- KdlValue :: Base10Float ( _) => "float" ,
17
- _ => "number" ,
17
+ KdlValue :: Null => "null" ,
18
18
}
19
19
}
20
20
21
- fn get_dash_values < ' a > ( doc : & ' a KdlDocument , name : & ' static str ) -> Vec < & ' a KdlEntry > {
21
+ fn get_dash_values < ' a > ( doc : & ' a KdlDocument , name : & ' static str ) -> Vec < & ' a KdlValue > {
22
22
doc. get ( name)
23
23
. and_then ( |n| n. children ( ) )
24
24
. map ( |doc| doc. nodes ( ) )
@@ -35,11 +35,11 @@ impl Parser {
35
35
}
36
36
37
37
pub fn parse ( self ) -> Result < Config , ParseError > {
38
- self . parse_with_default ( None )
38
+ self . parse_with_config ( None )
39
39
}
40
40
41
- pub fn parse_with_default ( self , default : Option < Config > ) -> Result < Config , ParseError > {
42
- self . inner_parse ( default . unwrap_or_default ( ) )
41
+ pub fn parse_with_config ( self , config : Option < Config > ) -> Result < Config , ParseError > {
42
+ self . inner_parse ( config . unwrap_or_default ( ) )
43
43
}
44
44
45
45
fn inner_parse ( self , mut config : Config ) -> Result < Config , ParseError > {
@@ -94,7 +94,7 @@ impl Parser {
94
94
return Err ( ParseError :: UnknownConfigurationOption (
95
95
option. to_owned ( ) ,
96
96
self . src . clone ( ) ,
97
- * node. name ( ) . span ( ) ,
97
+ node. name ( ) . span ( ) ,
98
98
) ) ;
99
99
}
100
100
}
@@ -107,7 +107,7 @@ impl Parser {
107
107
node. entries ( )
108
108
. iter ( )
109
109
. next ( )
110
- . ok_or ( ParseError :: MissingValue ( self . src . clone ( ) , * node. span ( ) ) )
110
+ . ok_or ( ParseError :: MissingValue ( self . src . clone ( ) , node. span ( ) ) )
111
111
}
112
112
113
113
// fn first_entry_as_string<'a>(&'a self, node: &'a KdlNode) -> Result<&'a str, ParseError> {
@@ -123,12 +123,16 @@ impl Parser {
123
123
124
124
fn first_entry_as_i64 < ' a > ( & ' a self , node : & ' a KdlNode ) -> Result < i64 , ParseError > {
125
125
self . first_entry ( node) . and_then ( |entry| {
126
- entry. value ( ) . as_i64 ( ) . ok_or ( ParseError :: TypeMismatch (
127
- "number" ,
128
- type_from_value ( entry. value ( ) ) ,
129
- self . src . clone ( ) ,
130
- * entry. span ( ) ,
131
- ) )
126
+ entry
127
+ . value ( )
128
+ . as_integer ( )
129
+ . map ( |n| n as i64 )
130
+ . ok_or ( ParseError :: TypeMismatch (
131
+ "integer" ,
132
+ type_from_value ( entry. value ( ) ) ,
133
+ self . src . clone ( ) ,
134
+ entry. span ( ) ,
135
+ ) )
132
136
} )
133
137
}
134
138
@@ -138,18 +142,18 @@ impl Parser {
138
142
"bool" ,
139
143
type_from_value ( entry. value ( ) ) ,
140
144
self . src . clone ( ) ,
141
- * entry. span ( ) ,
145
+ entry. span ( ) ,
142
146
) )
143
147
} )
144
148
}
145
149
146
150
fn get_default_optional ( & self , node : & KdlNode ) -> Result < bool , ParseError > {
147
151
match node. get ( "default" ) {
148
- Some ( value) => value. value ( ) . as_bool ( ) . ok_or ( ParseError :: TypeMismatch (
152
+ Some ( value) => value. as_bool ( ) . ok_or ( ParseError :: TypeMismatch (
149
153
"boolean" ,
150
- type_from_value ( value. value ( ) ) ,
154
+ type_from_value ( value) ,
151
155
self . src . clone ( ) ,
152
- * value . span ( ) ,
156
+ node . span ( ) ,
153
157
) ) ,
154
158
None => Ok ( true ) ,
155
159
}
@@ -162,15 +166,14 @@ impl Parser {
162
166
) -> Result < Vec < String > , ParseError > {
163
167
get_dash_values ( doc, name)
164
168
. into_iter ( )
165
- . map ( |entry| {
166
- entry
167
- . value ( )
169
+ . map ( |value| {
170
+ value
168
171
. as_string ( )
169
172
. ok_or ( ParseError :: TypeMismatch (
170
173
"string" ,
171
- type_from_value ( entry . value ( ) ) ,
174
+ type_from_value ( value) ,
172
175
self . src . clone ( ) ,
173
- * entry . span ( ) ,
176
+ doc . span ( ) ,
174
177
) )
175
178
. map ( |s| s. to_string ( ) )
176
179
} )
@@ -184,15 +187,14 @@ impl Parser {
184
187
) -> Result < Vec < String > , ParseError > {
185
188
get_dash_values ( doc, name)
186
189
. into_iter ( )
187
- . map ( |entry| {
188
- entry
189
- . value ( )
190
+ . map ( |value| {
191
+ value
190
192
. as_string ( )
191
193
. ok_or ( ParseError :: TypeMismatch (
192
194
"string" ,
193
- type_from_value ( entry . value ( ) ) ,
195
+ type_from_value ( value) ,
194
196
self . src . clone ( ) ,
195
- * entry . span ( ) ,
197
+ doc . span ( ) ,
196
198
) )
197
199
. map ( |s| shellexpand:: tilde ( s) . to_string ( ) )
198
200
} )
0 commit comments