song-idea-generator/sigweb/src/main.rs

97 lines
2.1 KiB
Rust
Raw Normal View History

2021-10-17 19:22:44 +00:00
#[macro_use]
extern crate rocket;
use libsig;
2021-10-19 00:24:21 +00:00
use rocket::response::content::{Css, Html};
2021-10-17 19:22:44 +00:00
use rocket::serde::json::Json;
2021-10-19 01:22:26 +00:00
use rocket::State;
2021-10-19 00:24:21 +00:00
use serde::{Deserialize, Serialize};
2021-10-17 19:22:44 +00:00
use serde_json::{json, Value};
2021-10-19 00:24:21 +00:00
mod templates;
2021-10-17 19:22:44 +00:00
2021-10-19 01:22:26 +00:00
struct BaseUrl {
url: String,
}
2021-10-17 19:22:44 +00:00
#[get("/api")]
fn api_version_available() -> Json<Value> {
Json(json! ({
"versions": [ "v1" ]
}))
}
#[get("/api/v1")]
fn api_v1_index() -> Json<Value> {
Json(json! ({
"endpoints": [ "generate", "generate_ambient" ]
}))
}
#[derive(Debug, Serialize, Deserialize)]
struct Output {
data: libsig::SongIdea,
text: String,
}
#[get("/api/v1/generate")]
2021-10-19 00:24:21 +00:00
fn api_v1_generate() -> Json<Output> {
2021-10-17 19:22:44 +00:00
let idea = libsig::SongIdea::generate();
Json(Output {
data: idea.clone(),
2021-10-19 00:24:21 +00:00
text: idea.to_string(),
2021-10-17 19:22:44 +00:00
})
}
#[get("/api/v1/generate_ambient")]
2021-10-19 00:24:21 +00:00
fn api_v1_generate_ambient() -> Json<Output> {
2021-10-17 19:22:44 +00:00
let idea = libsig::SongIdea::generate_ambient();
Json(Output {
data: idea.clone(),
2021-10-19 00:24:21 +00:00
text: idea.to_string(),
2021-10-17 19:22:44 +00:00
})
}
2021-10-19 00:24:21 +00:00
#[get("/")]
2021-10-19 01:22:26 +00:00
fn index(base: &State<BaseUrl>) -> Html<String> {
Html(templates::main_page_template(None, &base.url))
2021-10-19 00:24:21 +00:00
}
#[get("/generate")]
2021-10-19 01:22:26 +00:00
fn generate(base: &State<BaseUrl>) -> Html<String> {
2021-10-19 00:24:21 +00:00
Html(templates::main_page_template(Some(
libsig::SongIdea::generate(),
2021-10-19 01:22:26 +00:00
), &base.url))
2021-10-19 00:24:21 +00:00
}
#[get("/generate_ambient")]
2021-10-19 01:22:26 +00:00
fn generate_ambient(base: &State<BaseUrl>) -> Html<String> {
2021-10-19 00:24:21 +00:00
Html(templates::main_page_template(Some(
libsig::SongIdea::generate_ambient(),
2021-10-19 01:22:26 +00:00
), &base.url))
2021-10-19 00:24:21 +00:00
}
#[get("/style.css")]
2021-10-19 01:22:26 +00:00
async fn style_css() -> Css<String> {
Css(include_str!("../static/style.css").into())
2021-10-19 00:24:21 +00:00
}
2021-10-17 19:22:44 +00:00
#[launch]
fn rocket() -> _ {
2021-10-19 01:22:26 +00:00
rocket::build()
.manage(BaseUrl {
url: std::env::var("SIGWEB_BASE_URL").unwrap_or("/".to_string()),
})
.mount(
"/",
routes![
api_version_available,
api_v1_index,
api_v1_generate,
api_v1_generate_ambient,
generate,
generate_ambient,
index,
style_css,
],
)
2021-10-17 19:22:44 +00:00
}