blob: d5d4c30484586efbd44c15debfd752cefbc8f6f6 (
plain)
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
|
use crate::ast::*;
pub fn parse(arg: &str) -> Value {
let token = arg.trim();
parse_number(token)
.or(parse_bool(token))
.or(parse_symbol(token))
.unwrap()
}
fn parse_symbol(token: &str) -> Result<Value, String> {
Ok(Value::Sym(token.to_string()))
}
fn parse_bool(token: &str) -> Result<Value, String> {
token
.parse::<bool>()
.map(Value::Bool)
.map_err(|e| e.to_string())
}
fn parse_number(token: &str) -> Result<Value, String> {
token
.parse::<i32>()
.map(Value::Num)
.map_err(|e| e.to_string())
}
|