rust: remove rustyline ANSI CSI codes from output
[jackhill/mal.git] / rust / src / bin / step1_read_print.rs
CommitLineData
bbeb1b87 1extern crate mal;
abdd56eb 2
bbeb1b87
AC
3use mal::types::{MalVal, MalRet, MalError};
4use mal::types::MalError::{ErrString, ErrMalVal};
5use mal::{readline, reader};
abdd56eb
JM
6
7// read
0ab374bc 8fn read(str: String) -> MalRet {
abdd56eb
JM
9 reader::read_str(str)
10}
11
12// eval
0ab374bc 13fn eval(ast: MalVal) -> MalRet {
abdd56eb
JM
14 Ok(ast)
15}
16
17// print
18fn print(exp: MalVal) -> String {
19 exp.pr_str(true)
20}
21
fb439f3c
JM
22fn rep(str: &str) -> Result<String,MalError> {
23 let ast = try!(read(str.to_string()));
24 //println!("read: {}", ast);
25 let exp = try!(eval(ast));
26 Ok(print(exp))
abdd56eb
JM
27}
28
29fn main() {
30 loop {
31 let line = readline::mal_readline("user> ");
32 match line { None => break, _ => () }
fb439f3c 33 match rep(&line.unwrap()) {
abdd56eb 34 Ok(str) => println!("{}", str),
3744d566
JM
35 Err(ErrMalVal(_)) => (), // Blank line
36 Err(ErrString(s)) => println!("Error: {}", s),
abdd56eb
JM
37 }
38 }
39}