seaography_generator/
lib.rs

1pub mod error;
2pub use error::{Error, Result};
3pub mod parser;
4pub mod templates;
5pub mod writer;
6
7mod util;
8
9#[derive(Debug, Clone, Copy, Eq, PartialEq)]
10pub enum WebFrameworkEnum {
11    Actix,
12    Poem,
13    Axum,
14}
15
16#[allow(clippy::too_many_arguments)]
17pub async fn write_project<P: AsRef<std::path::Path>, T: AsRef<std::path::Path>>(
18    root_path: &P,
19    entities_path: &T,
20    db_url: &str,
21    crate_name: &str,
22    sql_library: &str,
23    framework: WebFrameworkEnum,
24    depth_limit: Option<usize>,
25    complexity_limit: Option<usize>,
26) -> Result<()> {
27    writer::write_cargo_toml(root_path, crate_name, sql_library, framework)?;
28
29    let src_path = &root_path.as_ref().join("src");
30
31    writer::write_query_root(src_path, entities_path)?;
32    writer::write_lib(src_path)?;
33
34    match framework {
35        WebFrameworkEnum::Actix => crate::templates::actix::write_main(src_path, crate_name)?,
36        WebFrameworkEnum::Poem => crate::templates::poem::write_main(src_path, crate_name)?,
37        WebFrameworkEnum::Axum => crate::templates::axum::write_main(src_path, crate_name)?,
38    }
39
40    writer::write_env(&root_path.as_ref(), db_url, depth_limit, complexity_limit)?;
41
42    std::process::Command::new("cargo")
43        .arg("fmt")
44        .current_dir(root_path)
45        .spawn()?
46        .wait()?;
47
48    Ok(())
49}