From dd6cdbee6d0f58fb83c369d8171d2b35e0f548c3 Mon Sep 17 00:00:00 2001 From: Sangeeth Sudheer Date: Tue, 16 Aug 2022 15:03:13 +0530 Subject: [PATCH] gcd web p2 --- gcd-web/src/main.rs | 58 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/gcd-web/src/main.rs b/gcd-web/src/main.rs index 1f36a4f..325f8f0 100644 --- a/gcd-web/src/main.rs +++ b/gcd-web/src/main.rs @@ -1,22 +1,45 @@ use actix_web::{web, App, HttpResponse, HttpServer}; +use serde::Deserialize; + +#[derive(Deserialize)] +struct GcdParams { + a: u64, + b: u64, +} + +fn gcd(mut a: u64, mut b: u64) -> u64 { + while a > 0 { + if a < b { + let temp = a; + a = b; + b = temp; + } + + a = a % b; + } + + b +} fn main() { let server = HttpServer::new(|| { App::new() .route("/", web::get().to(get_index)) + .route("/gcd", web::post().to(post_gcd)) }); println!("Serving on http://localhost:3300"); - server.bind("127.0.0.1:3300").expect("error binding server to address") - .run().expect("error running server") + server + .bind("127.0.0.1:3300") + .expect("error binding server to address") + .run() + .expect("error running server") } fn get_index() -> HttpResponse { - HttpResponse::Ok() - .content_type("text/html") - .body( - r#" + HttpResponse::Ok().content_type("text/html").body( + r#" GCD Calculator
@@ -24,5 +47,24 @@ fn get_index() -> HttpResponse {
"#, - ) -} \ No newline at end of file + ) +} + +fn post_gcd(form: web::Form) -> HttpResponse { + if form.a == 0 || form.b == 0 { + return HttpResponse::BadRequest() + .content_type("text/html") + .body("Computing the GCD with 0 is boring"); + } + + let response_text = format!( + "The greatest common divisor of {} and {} is {}", + form.a, + form.b, + gcd(form.a, form.b) + ); + + HttpResponse::Ok() + .content_type("text/html") + .body(response_text) +}