Compare commits
No commits in common. "3d93beb5bde5ff6796275f9cf49c5c9b1250d20b" and "b96bdb3068d964698825aae6ba63bf2073c21682" have entirely different histories.
3d93beb5bd
...
b96bdb3068
7 changed files with 21 additions and 21 deletions
|
|
@ -6,3 +6,4 @@ members = [
|
||||||
"lib/sandbox"
|
"lib/sandbox"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,3 @@ proc-macro2 = "1.0.92"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[lints.clippy]
|
|
||||||
uninlined_format_args = "allow"
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,3 @@ serde = "1.0.216"
|
||||||
serde_json = "1.0.134"
|
serde_json = "1.0.134"
|
||||||
structmeta = "0.3.0"
|
structmeta = "0.3.0"
|
||||||
syn = { version = "2.0.92", features = ["extra-traits", "full", "parsing"] }
|
syn = { version = "2.0.92", features = ["extra-traits", "full", "parsing"] }
|
||||||
|
|
||||||
[lints.clippy]
|
|
||||||
uninlined_format_args = "allow"
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ impl Field {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate CREATE TABLE statement from parsed model
|
/// Generate CREATE TABLE statement from parsed model
|
||||||
pub fn generate_create_table_sql(models: &[Model]) -> Result<String> {
|
pub fn generate_create_table_sql(models: &Vec<Model>) -> Result<String> {
|
||||||
let mut sql_code: String = "".into();
|
let mut sql_code: String = "".into();
|
||||||
for model in models.iter() {
|
for model in models.iter() {
|
||||||
let mut fields_sql: Vec<String> = vec![];
|
let mut fields_sql: Vec<String> = vec![];
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,7 @@ fn gen_insert_method(model: &Model) -> TokenStream {
|
||||||
|
|
||||||
fn gen_insert_many_method(model: &Model) -> TokenStream {
|
fn gen_insert_many_method(model: &Model) -> TokenStream {
|
||||||
let resource_ident = format_ident!("{}", &model.name);
|
let resource_ident = format_ident!("{}", &model.name);
|
||||||
|
let error_msg = format!("Failed to insert many entities of resource {:?}", model.name.clone());
|
||||||
let sql_columns = model.fields.iter()
|
let sql_columns = model.fields.iter()
|
||||||
.map(|f| f.name.clone())
|
.map(|f| f.name.clone())
|
||||||
.collect::<Vec<String>>()
|
.collect::<Vec<String>>()
|
||||||
|
|
@ -217,18 +218,18 @@ fn gen_delete_by_id_method(model: &Model) -> TokenStream {
|
||||||
fn generate_repository_file(model: &Model) -> Result<SourceNodeContainer> {
|
fn generate_repository_file(model: &Model) -> Result<SourceNodeContainer> {
|
||||||
let resource_name = model.name.clone();
|
let resource_name = model.name.clone();
|
||||||
|
|
||||||
let resource_module_ident = format_ident!("{}", &model.module_path.first().unwrap());
|
let resource_module_ident = format_ident!("{}", &model.module_path.get(0).unwrap());
|
||||||
|
|
||||||
let resource_ident = format_ident!("{}", &resource_name);
|
let resource_ident = format_ident!("{}", &resource_name);
|
||||||
let repository_ident = format_ident!("{}Repository", resource_ident);
|
let repository_ident = format_ident!("{}Repository", resource_ident);
|
||||||
|
|
||||||
let get_all_method_code = gen_get_all_method(model);
|
let get_all_method_code = gen_get_all_method(&model);
|
||||||
let get_by_id_method_code = gen_get_by_id_method(model);
|
let get_by_id_method_code = gen_get_by_id_method(&model);
|
||||||
let get_many_by_id_method_code = gen_get_many_by_id_method(model);
|
let get_many_by_id_method_code = gen_get_many_by_id_method(&model);
|
||||||
let insert_method_code = gen_insert_method(model);
|
let insert_method_code = gen_insert_method(&model);
|
||||||
let insert_many_method_code = gen_insert_many_method(model);
|
let insert_many_method_code = gen_insert_many_method(&model);
|
||||||
let update_by_id_method_code = gen_update_by_id_method(model);
|
let update_by_id_method_code = gen_update_by_id_method(&model);
|
||||||
let delete_by_id_method_code = gen_delete_by_id_method(model);
|
let delete_by_id_method_code = gen_delete_by_id_method(&model);
|
||||||
|
|
||||||
// TODO: add import line
|
// TODO: add import line
|
||||||
|
|
||||||
|
|
@ -288,7 +289,7 @@ struct SourceNodeContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generate base repositories for all models
|
/// Generate base repositories for all models
|
||||||
pub fn generate_repositories_source_files(models: &[Model]) -> Result<SourceNodeContainer> {
|
pub fn generate_repositories_source_files(models: &Vec<Model>) -> Result<SourceNodeContainer> {
|
||||||
let mut nodes: Vec<SourceNodeContainer> = vec![];
|
let mut nodes: Vec<SourceNodeContainer> = vec![];
|
||||||
for model in models.iter() {
|
for model in models.iter() {
|
||||||
let snc = generate_repository_file(model)?;
|
let snc = generate_repository_file(model)?;
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,10 @@ enum GeneratorArgsSubCommands {
|
||||||
#[derive(FromArgs)]
|
#[derive(FromArgs)]
|
||||||
/// SQLX Generator args
|
/// SQLX Generator args
|
||||||
struct GeneratorArgs {
|
struct GeneratorArgs {
|
||||||
|
/// whether or not to debug
|
||||||
|
#[argh(switch, short = 'd')]
|
||||||
|
debug: bool,
|
||||||
|
|
||||||
/// path where to find Cargo.toml
|
/// path where to find Cargo.toml
|
||||||
#[argh(option)]
|
#[argh(option)]
|
||||||
project_root: Option<String>,
|
project_root: Option<String>,
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ fn parse_model_attribute(item: &syn::ItemStruct) -> Result<Option<SqlGeneratorMo
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if *attr_ident != "sql_generator_model" {
|
if attr_ident.to_string() != "sql_generator_model" {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ fn parse_field_attribute(field: &syn::Field) -> Result<Option<SqlGeneratorFieldA
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if *attr_ident != "sql_generator_field" {
|
if attr_ident.to_string() != "sql_generator_field" {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,10 +111,10 @@ fn parse_field_attribute(field: &syn::Field) -> Result<Option<SqlGeneratorFieldA
|
||||||
|
|
||||||
/// Take struct name as source, apply snake case and pluralize with a s
|
/// Take struct name as source, apply snake case and pluralize with a s
|
||||||
fn generate_table_name_from_struct_name(struct_name: &str) -> String {
|
fn generate_table_name_from_struct_name(struct_name: &str) -> String {
|
||||||
format!(
|
return format!(
|
||||||
"{}s",
|
"{}s",
|
||||||
struct_name.to_case(Case::Snake)
|
struct_name.to_case(Case::Snake)
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Scan for models struct in a rust file and return a struct representing the model
|
/// Scan for models struct in a rust file and return a struct representing the model
|
||||||
|
|
@ -221,7 +221,7 @@ pub fn parse_models_from_module(module_path: &Path) -> Result<Vec<Model>> {
|
||||||
let mut models: Vec<Model> = vec![];
|
let mut models: Vec<Model> = vec![];
|
||||||
|
|
||||||
if module_path.is_file() {
|
if module_path.is_file() {
|
||||||
models.extend(parse_models(module_path)?);
|
models.extend(parse_models(&module_path)?);
|
||||||
return Ok(models);
|
return Ok(models);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue