Skip to content

Commit 72af54e

Browse files
committed
alias shouldn't return optional, users should; started operation parsing
1 parent 81b7d37 commit 72af54e

File tree

1 file changed

+42
-32
lines changed

1 file changed

+42
-32
lines changed

src/parser.rs

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -259,66 +259,76 @@ make_parser!(
259259
);
260260

261261
make_parser!(
262-
Alias(input: char) -> Option<Name> {
263-
optional(
264-
NameP::new()
265-
.skip(many::<Vec<_>,_>(or(WhiteSpace::new(), LineTerminator::new(&true))))
266-
.skip(char(':'))
267-
)
262+
Alias(input: char) -> Name {
263+
NameP::new()
264+
.skip(many::<Vec<_>,_>(or(WhiteSpace::new(), LineTerminator::new(&true))))
265+
.skip(char(':'))
268266
.parse_stream(input)
269267
}
270268
);
271269

272-
// pub fn operation_definition<I: U8Input>(i: I) -> SimpleResult<I,Definition>
273-
// {
274-
// parse!{i;
275-
// let op_type = operation_type();
276-
// white_space() <|> line_terminator();
277-
// let name = option(|i| name(i).map(Some), None);
278-
279-
// ret {
280-
// let op = Operation::new(op_type, name, Vec::new(), Vec::new());
281-
// Definition::OperationDefinition(op)
282-
// }
283-
// }
284-
// }
270+
make_parser!(
271+
OperationDefinition(input: char) -> Operation {
272+
OperationTypeP::new()
273+
.skip(many::<Vec<_>,_>(or(WhiteSpace::new(), LineTerminator::new(&true))))
274+
.and(optional(NameP::new()))
275+
.map(|(op_type,name)| {
276+
Operation::new(op_type, name, Vec::new(), Vec::new())
277+
})
278+
.parse_stream(input)
279+
}
280+
);
285281

286282
#[cfg(test)]
287283
mod tests {
288284
use super::*;
289285
use combine::{Parser,State};
290286

291-
macro_rules! assert_sucessful_parse {
287+
macro_rules! assert_successful_parse {
292288
($parser:ident,$input:expr,$result:expr) => {
293289
assert_eq!($parser::new().parse(State::new($input)).map(|x| x.0), Ok($result));
294290
}
295291
}
296292

297293
#[test]
298294
fn test_parse_comment() {
299-
assert_sucessful_parse!(LineComment, "#hello world\r\n", ());
295+
assert_successful_parse!(LineComment, "#hello world\r\n", ());
300296
}
301297

302298
#[test]
303299
fn test_parse_operationtype() {
304-
assert_sucessful_parse!(OperationTypeP, "query", OperationType::Query);
305-
assert_sucessful_parse!(OperationTypeP, "mutation", OperationType::Mutation);
300+
assert_successful_parse!(OperationTypeP, "query", OperationType::Query);
301+
assert_successful_parse!(OperationTypeP, "mutation", OperationType::Mutation);
306302
}
307303

308304
#[test]
309305
fn test_parse_name() {
310-
assert_sucessful_parse!(NameP, "_asd", String::from("_asd"));
311-
assert_sucessful_parse!(NameP, "aasd", String::from("aasd"));
312-
assert_sucessful_parse!(NameP, "zasd", String::from("zasd"));
313-
assert_sucessful_parse!(NameP, "Aasd", String::from("Aasd"));
314-
assert_sucessful_parse!(NameP, "Zasd", String::from("Zasd"));
306+
assert_successful_parse!(NameP, "_asd", String::from("_asd"));
307+
assert_successful_parse!(NameP, "aasd", String::from("aasd"));
308+
assert_successful_parse!(NameP, "zasd", String::from("zasd"));
309+
assert_successful_parse!(NameP, "Aasd", String::from("Aasd"));
310+
assert_successful_parse!(NameP, "Zasd", String::from("Zasd"));
315311
}
316312

317313
#[test]
318314
fn test_parse_alias() {
319-
assert_sucessful_parse!(Alias, "asd:", Some(String::from("asd")));
320-
assert_sucessful_parse!(Alias, "asd :", Some(String::from("asd")));
321-
assert_sucessful_parse!(Alias, "asd \r\n:", Some(String::from("asd")));
322-
// assert_sucessful_parse!(Alias, "asd", None);
315+
assert_successful_parse!(Alias, "asd:", String::from("asd"));
316+
assert_successful_parse!(Alias, "asd :", String::from("asd"));
317+
assert_successful_parse!(Alias, "asd \r\n:", String::from("asd"));
318+
}
319+
320+
#[test]
321+
fn test_parse_operation() {
322+
// named operation
323+
{
324+
let result = Operation::new(OperationType::Mutation, Some(String::from("test")), Vec::new(), Vec::new());
325+
assert_successful_parse!(OperationDefinition, "mutation test", result);
326+
}
327+
328+
// non named
329+
{
330+
let result = Operation::new(OperationType::Mutation, None, Vec::new(), Vec::new());
331+
assert_successful_parse!(OperationDefinition, "mutation", result);
332+
}
323333
}
324334
}

0 commit comments

Comments
 (0)