Browse Source

Print compilation result from main

main
Dylan Baker 3 years ago
parent
commit
93b4bc080d
2 changed files with 18 additions and 2 deletions
  1. 13
    0
      src/compiler.rs
  2. 5
    2
      src/main.rs

+ 13
- 0
src/compiler.rs View File

1
 use serde_json::{json, Value};
1
 use serde_json::{json, Value};
2
 
2
 
3
+use std::fmt::{Display, Formatter};
4
+
3
 use crate::error::CompilerError;
5
 use crate::error::CompilerError;
4
 use crate::parser::{Field, Identifier, Select};
6
 use crate::parser::{Field, Identifier, Select};
5
 
7
 
15
     }
17
     }
16
 }
18
 }
17
 
19
 
20
+impl Display for Query {
21
+    fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
22
+        let header = format!("GET /{}/_search", self.source.name);
23
+        let body = match serde_json::to_string_pretty(&self.body) {
24
+            Ok(body) => body,
25
+            Err(_) => return Err(std::fmt::Error {}),
26
+        };
27
+        write!(f, "{}\n{}", header, body)
28
+    }
29
+}
30
+
18
 pub fn compile(expr: Select) -> Result<Query, CompilerError> {
31
 pub fn compile(expr: Select) -> Result<Query, CompilerError> {
19
     let mut source = false;
32
     let mut source = false;
20
     let field_names: Vec<Value> = expr
33
     let field_names: Vec<Value> = expr

+ 5
- 2
src/main.rs View File

1
-use elastic::lexer;
2
 use elastic::parser;
1
 use elastic::parser;
2
+use elastic::{compiler::compile, lexer};
3
 
3
 
4
 use std::env;
4
 use std::env;
5
 
5
 
8
     let input = args.join(" ");
8
     let input = args.join(" ");
9
     let tokens = lexer::scan(&input)?;
9
     let tokens = lexer::scan(&input)?;
10
     let select = parser::parse(tokens)?;
10
     let select = parser::parse(tokens)?;
11
-    dbg!(select);
11
+    let result = compile(select)?;
12
+
13
+    println!("{}", result);
14
+
12
     Ok(())
15
     Ok(())
13
 }
16
 }

Loading…
Cancel
Save