work on annotate

This commit is contained in:
2025-04-14 21:56:00 +04:00
parent ed640ad20d
commit 1a745ff17f
11 changed files with 170 additions and 369 deletions

View File

@@ -0,0 +1,101 @@
use color_eyre::Result;
use minijinja::Environment;
use crate::generator::modules::{
discovery::{db::DbType, table::Table},
sea_orm::config::DateTimeCrate,
};
use comfy_table::{Cell, ContentArrangement, Table as CTable};
use super::{AnnotateCommentConfig, COMMENTBODY, COMMENTHEAD, COMMENTTAIL};
pub fn generate_comment(
table: &Table,
config: &AnnotateCommentConfig,
environment: &Environment<'static>,
db_type: &DbType,
date_time_crate: &DateTimeCrate,
) -> Result<String> {
let mut column_info_table = CTable::new();
let mut header = Vec::new();
if config.column_name.unwrap() {
header.push("Name");
}
if config.column_db_type.unwrap() {
header.push("DbType");
}
if config.column_rust_type.unwrap() {
header.push("RsType");
}
if config.column_attributes.unwrap() {
header.push("Attrs");
}
column_info_table
.load_preset(" -+=++ + ++")
.set_content_arrangement(ContentArrangement::Dynamic)
.set_header(header);
if let Some(width) = config.max_wdith {
column_info_table.set_width(width);
}
for column in &table.columns {
let mut row = Vec::new();
if config.column_name.unwrap() {
row.push(Cell::new(column.name.clone()))
}
if config.column_db_type.unwrap() {
let column_type = column.get_db_type(db_type);
row.push(Cell::new(column_type));
}
if config.column_rust_type.unwrap() {
let column_type = column.get_rust_type(date_time_crate);
row.push(Cell::new(column_type));
}
if config.column_attributes.unwrap() {
let attrs_string = column.attrs_to_string();
row.push(Cell::new(attrs_string));
}
column_info_table.add_row(row);
}
// column_info_table.to_string()
// let config_part = match parsed_settings {
// Some(settings) => {
// let settings_str = serde_yaml::to_string(&settings)?;
// let settings_str = settings_str
// .lines()
// .map(|line| format!(" {}", line))
// .collect::<Vec<_>>()
// .join("\n");
// format!(
// "{SETTINGSDELIMITER}\n{}\n{SETTINGSDELIMITER}\n\n",
// settings_str
// )
// }
// None => String::new(),
// };
// let table_name = &table.name;
// let table_name_str = if config.table_name {
// format!("Table: {}\n", table_name)
// } else {
// String::new()
// };
// let string = format!("{HEADER}\n{config_part}{table_name_str}\n{column_info_table}");
// let padded_string = Self::pad_comment(&string);
Ok(String::new())
}
pub fn pad_comment(s: &str) -> String {
let parts = s.split('\n').collect::<Vec<_>>();
let mut padded = String::new();
for (index, part) in parts.iter().enumerate() {
let first = index == 0;
let comment = match first {
true => COMMENTHEAD.to_string(),
false => COMMENTBODY.to_string(),
};
let padded_part = format!("{} {}\n", comment, part);
padded.push_str(&padded_part);
}
padded.push_str(COMMENTTAIL);
padded
}