50 lines
1.0 KiB
Rust
50 lines
1.0 KiB
Rust
#[macro_use]
|
|
extern crate rocket;
|
|
use libsig;
|
|
use serde::{Serialize, Deserialize};
|
|
use rocket::serde::json::Json;
|
|
use serde_json::{json, Value};
|
|
|
|
#[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")]
|
|
fn generate() -> Json<Output> {
|
|
let idea = libsig::SongIdea::generate();
|
|
Json(Output {
|
|
data: idea.clone(),
|
|
text: idea.to_string()
|
|
})
|
|
}
|
|
|
|
#[get("/api/v1/generate_ambient")]
|
|
fn generate_ambient() -> Json<Output> {
|
|
let idea = libsig::SongIdea::generate_ambient();
|
|
Json(Output {
|
|
data: idea.clone(),
|
|
text: idea.to_string()
|
|
})
|
|
}
|
|
|
|
#[launch]
|
|
fn rocket() -> _ {
|
|
rocket::build().mount("/", routes![api_version_available, api_v1_index, generate, generate_ambient])
|
|
}
|