seaography_generator/
lib.rs1pub 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}