diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-02-17 20:05:04 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-02-17 20:05:04 +0800 |
commit | 1cdbfa1943c5b462daec2b4a81f16679eac2c9a0 (patch) | |
tree | 782e40d3d3301fc13f4a5a0ec3ab711dca780d55 | |
parent | 15b18d9c6a04b67f1e0a825a7abdf0ca6728e499 (diff) |
feat: add a svgbob_server crate to serve converting of text diagrams in http
-rw-r--r-- | packages/svgbob_server/Cargo.toml | 16 | ||||
-rw-r--r-- | packages/svgbob_server/src/main.rs | 38 |
2 files changed, 54 insertions, 0 deletions
diff --git a/packages/svgbob_server/Cargo.toml b/packages/svgbob_server/Cargo.toml new file mode 100644 index 0000000..e2b02c2 --- /dev/null +++ b/packages/svgbob_server/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "svgbob_server" +version = "0.6.4" +authors = ["Jovansonlee Cesar <ivanceras@gmail.com>"] +description = "Transform your ascii diagrams into happy little SVG" +repository = "https://github.com/ivanceras/svgbob" +documentation = "https://docs.rs/svgbob" +keywords = ["ascii", "svg", "convert", "bob"] +license = "Apache-2.0" +edition = "2021" + + +[dependencies] +svgbob = { path = "../svgbob", version = "0.6" } +axum = "0.4.5" +tokio = { version = "1.0", features = ["full"] } diff --git a/packages/svgbob_server/src/main.rs b/packages/svgbob_server/src/main.rs new file mode 100644 index 0000000..e0b8f2a --- /dev/null +++ b/packages/svgbob_server/src/main.rs @@ -0,0 +1,38 @@ +use axum::body::Bytes; +use axum::http::StatusCode; +use axum::{routing::get, Router}; +use std::net::SocketAddr; + +const VERSION: &str = env!("CARGO_PKG_VERSION"); +const DEFAULT_PORT: u16 = 3000; + +async fn hello() -> String { + format!("Hello from svgbob_server {}", VERSION) +} + +async fn text_to_svgbob(body: Bytes) -> Result<String, StatusCode> { + if let Ok(input) = String::from_utf8(body.to_vec()) { + let svg = svgbob::to_svg(&input); + Ok(svg) + } else { + Err(StatusCode::BAD_REQUEST) + } +} + +#[tokio::main] +async fn main() { + let port = std::env::var("PORT") + .ok() + .map(|port| port.parse::<u16>().ok()) + .flatten() + .unwrap_or(DEFAULT_PORT); + + let app = Router::new().route("/", get(hello).post(text_to_svgbob)); + + let socket: SocketAddr = ([0, 0, 0, 0], port).into(); + println!("serving at: {}", socket); + axum::Server::bind(&socket) + .serve(app.into_make_service()) + .await + .expect("Error starting server"); +} |