use proc_macro2::TokenStream;
use crate::common::Parser;
pub fn expand(input: TokenStream) -> syn::Result<TokenStream> {
let mut parser = Parser::new(input);
let mut columns = None;
let mut queries = None;
let mut indexes = None;
let mut config = None;
let name = parser.parse_name()?;
let version = parser.parse_version()?.unwrap_or(1);
let is_persist = parser.parse_persist()?;
while let Some(ident) = parser.peek_next() {
match ident.to_string().as_str() {
"columns" => {
let res = parser.parse_columns()?;
columns = Some(res)
}
"indexes" => {
let res = parser.parse_indexes()?;
indexes = Some(res);
}
"queries" => {
let res = parser.parse_queries()?;
queries = Some(res)
}
"config" => {
let res = parser.parse_configs()?;
config = Some(res)
}
"version" => {
return Err(syn::Error::new(
ident.span(),
"version must be specified before columns/indexes/queries/config",
));
}
_ => return Err(syn::Error::new(ident.span(), "Unexpected identifier")),
}
}
let mut columns = columns.expect("defined");
if let Some(i) = indexes {
columns.indexes = i
}
if is_persist {
crate::generators::persist::expand(name, columns, queries, config, version)
} else {
crate::generators::in_memory::expand_from_parsed(name, columns, queries, config)
}
}