1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use corpus_database_dsl::{generate_query, parse_schema};
use proc_macro::TokenStream;
use proc_macro_hack::proc_macro_hack;
use std::env;
use std::path::Path;

#[proc_macro_hack]
pub fn datapond_query(input: TokenStream) -> TokenStream {
    let current_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
    let core_schema_path = Path::new(&current_dir).join("../database/src/schema.dl");
    assert!(core_schema_path.exists());
    let derived_relations_path = Path::new(&current_dir).join("../database/src/derived.dl");
    assert!(derived_relations_path.exists());
    let definition = parse_schema(&core_schema_path, &derived_relations_path);
    generate_query(definition, input.into()).into()
}