use poem::{listener::TcpListener, Route, Server};
use poem_openapi::{param::Query, OpenApi, OpenApiService, payload::Json};
mod quilt;
use quilt::manifest_from_uri;
use quilt::package_uri;
async fn message(name: String) -> String {
let uri = package_uri(name);
let manifest = manifest_from_uri(uri).await;
let message = format!("Hello, world! {}", manifest.unwrap().rows.len());
message
}
struct Api;
#[OpenApi]
impl Api {
#[oai(path = "/example-package", method = "get")]
async fn index(&self, package_name: Query<Option<String>>) -> Json<Vec<String>> {
match package_name.0 {
Some(name) => {
Json(vec![message(name).await])
},
None => Json(vec!["hello!".to_string()]),
}
}
}
#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
if std::env::var_os("RUST_LOG").is_none() {
std::env::set_var("RUST_LOG", "poem=debug");
}
tracing_subscriber::fmt::init();
let api_service =
OpenApiService::new(Api, "Hello World", "1.0").server("http://localhost:3000/api");
let ui = api_service.swagger_ui();
Server::new(TcpListener::bind("0.0.0.0:3000"))
.run(Route::new()
.nest("/api", api_service)
.nest("/", ui))
.await
}