use clap::Parser; use crate::backend::backend::build_api; use neo4rs::Graph; use rocket::Config; use rocket_okapi::swagger_ui::{make_swagger_ui, SwaggerUIConfig}; mod backend; mod graph; /// Simple Route planning application #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { /// host of db #[arg(long, default_value_t=String::from("127.0.0.1"))] host: String, /// port of db #[arg(long, default_value_t = 7687)] port: u16, /// username of db #[arg(long, default_value_t = String::new())] username: String, /// password of db #[arg(long, default_value_t = String::new())] password: String, } fn main() { let args = Args::parse(); let tokio = tokio::runtime::Runtime::new().expect("Failed to spawn tokio runtime"); tokio.block_on(async move { let uri: String = format!("{}:{}", args.host, args.port); // connect to neo4j database let graph = Graph::new(uri, args.username, args.password).await.unwrap(); // configure api port and interface let config = Config { address: "0.0.0.0".parse().unwrap(), port: 8081, ..Default::default() }; // configure api and swagger ui let rock = rocket::custom(config) .manage(graph) .mount("/api/", build_api()) .mount( "/docs/", make_swagger_ui(&SwaggerUIConfig { url: "../api/openapi.json".to_owned(), ..Default::default() }), ); let rock = rock.launch().await; match rock { Ok(_) => println!("Rocket shut down gracefully."), Err(err) => println!("Rocket had an error: {}", err), }; }); }