Last active
September 9, 2023 19:27
-
-
Save mayankchoubey/39b888b1ce24063c0f2a23c0ce8af9ac to your computer and use it in GitHub Desktop.
Rust - QR generator API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [package] | |
| name = "actix_qr_generator" | |
| version = "0.1.0" | |
| edition = "2021" | |
| [dependencies] | |
| actix-web = { version = "4", features = ["openssl"] } | |
| qrcode-generator = "4.1.8" | |
| serde = { version = "1.0", features = ["derive"] } | |
| serde_json = "1" | |
| openssl = { version = "0.10" , features = ["vendored"] } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| use actix_web::{web, post, App, HttpServer, HttpResponse, Responder}; | |
| use qrcode_generator::QrCodeEcc; | |
| use serde::Deserialize; | |
| use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; | |
| #[derive(Deserialize)] | |
| struct QrRequest { | |
| urlToEmbed: String, | |
| } | |
| #[post("/qr")] | |
| async fn generate_qr(qr_request: web::Json<QrRequest>) -> impl Responder { | |
| if qr_request.urlToEmbed.is_empty() { | |
| return HttpResponse::BadRequest().into(); | |
| } | |
| let result: Vec<u8> = qrcode_generator::to_png_to_vec(qr_request.urlToEmbed.clone(), QrCodeEcc::Low, 512) | |
| .unwrap(); | |
| return HttpResponse::Ok() | |
| .content_type("image/png") | |
| .body(result); | |
| } | |
| #[actix_web::main] | |
| async fn main() -> std::io::Result<()> { | |
| let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap(); | |
| builder | |
| .set_private_key_file("/Users/mayankc/Work/source/perfComparisons/certs/key.pem", SslFiletype::PEM) | |
| .unwrap(); | |
| builder | |
| .set_certificate_chain_file("/Users/mayankc/Work/source/perfComparisons/certs/cert.pem") | |
| .unwrap(); | |
| HttpServer::new(|| App::new().service(generate_qr)) | |
| .bind_openssl("127.0.0.1:3000", builder)? | |
| .run() | |
| .await | |
| } | |
| // NOTE ================================================ | |
| // The app has been built in release mode. | |
| // ===================================================== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment