2024-05-29 14:35:50 +02:00
|
|
|
use clap::Parser;
|
2024-05-29 13:40:37 +02:00
|
|
|
use crate::backend::backend::build_api;
|
|
|
|
use neo4rs::Graph;
|
2024-05-24 13:09:17 +02:00
|
|
|
use rocket::Config;
|
|
|
|
use rocket_okapi::swagger_ui::{make_swagger_ui, SwaggerUIConfig};
|
|
|
|
|
|
|
|
mod backend;
|
2024-05-29 13:40:37 +02:00
|
|
|
mod graph;
|
2024-05-24 13:09:17 +02:00
|
|
|
|
2024-05-29 14:35:50 +02:00
|
|
|
/// 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,
|
|
|
|
}
|
|
|
|
|
2024-05-24 13:09:17 +02:00
|
|
|
fn main() {
|
2024-05-29 14:35:50 +02:00
|
|
|
let args = Args::parse();
|
2024-05-29 13:40:37 +02:00
|
|
|
let tokio = tokio::runtime::Runtime::new().expect("Failed to spawn tokio runtime");
|
2024-05-24 13:09:17 +02:00
|
|
|
|
2024-05-29 13:40:37 +02:00
|
|
|
tokio.block_on(async move {
|
2024-05-29 14:35:50 +02:00
|
|
|
let uri: String = format!("{}:{}", args.host, args.port);
|
2024-05-29 13:40:37 +02:00
|
|
|
// connect to neo4j database
|
2024-05-29 14:35:50 +02:00
|
|
|
let graph = Graph::new(uri, args.username, args.password).await.unwrap();
|
2024-05-24 13:09:17 +02:00
|
|
|
|
2024-05-29 13:40:37 +02:00
|
|
|
// configure api port and interface
|
2024-05-24 13:09:17 +02:00
|
|
|
let config = Config {
|
|
|
|
address: "0.0.0.0".parse().unwrap(),
|
|
|
|
port: 8081,
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
|
2024-05-29 13:40:37 +02:00
|
|
|
// configure api and swagger ui
|
2024-05-24 13:09:17 +02:00
|
|
|
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),
|
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|