summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2022-02-17 20:05:04 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2022-02-17 20:05:04 +0800
commit1cdbfa1943c5b462daec2b4a81f16679eac2c9a0 (patch)
tree782e40d3d3301fc13f4a5a0ec3ab711dca780d55
parent15b18d9c6a04b67f1e0a825a7abdf0ca6728e499 (diff)
feat: add a svgbob_server crate to serve converting of text diagrams in http
-rw-r--r--packages/svgbob_server/Cargo.toml16
-rw-r--r--packages/svgbob_server/src/main.rs38
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");
+}