start is_prime challenge

This commit is contained in:
Caleb Webber 2024-03-05 20:49:03 -05:00
parent 1d5a1aa2b1
commit 34487833bd
3 changed files with 154 additions and 0 deletions

82
Cargo.lock generated
View file

@ -2,6 +2,88 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "itoa"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
[[package]]
name = "proc-macro2"
version = "1.0.78"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
dependencies = [
"unicode-ident",
]
[[package]]
name = "protohackers"
version = "0.1.0"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "quote"
version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
dependencies = [
"proc-macro2",
]
[[package]]
name = "ryu"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
[[package]]
name = "serde"
version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "syn"
version = "2.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"

View file

@ -9,3 +9,5 @@ edition = "2021"
name = "smoke"
[dependencies]
serde = { version = "1.0.197", features = ["serde_derive"] }
serde_json = "1.0.114"

70
src/bin/is_prime.rs Normal file
View file

@ -0,0 +1,70 @@
use std::{io::{Read, Write}, net::TcpListener};
use serde::{Serialize, Deserialize};
use serde_json;
const PORT: usize = 10000;
const BUFF_SIZE: usize = 1;
#[derive(Deserialize, Debug)]
struct Request {
method: String,
number: f32
}
#[derive(Serialize, Debug)]
struct Response {
method: String,
prime: bool
}
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind(format!("0.0.0.0:{PORT}"))?;
for stream in listener.incoming() {
std::thread::spawn(move || {
match stream {
Ok(mut stream) => {
let mut big_buf: Vec<u8> = vec![];
loop {
let mut buf: [u8; BUFF_SIZE] = [0; BUFF_SIZE];
if let Ok(_) = stream.read_exact(&mut buf) {
println!("{:?}", buf);
match buf {
[10] => {
println!("got newline");
let s = String::from_utf8(big_buf.clone()).unwrap();
let d = serde_json::from_str::<Request>(&s);
match d {
Ok(message) => {
let response = Response {
method: String::from("isPrime"),
prime: false
};
let res_str = serde_json::to_string(&response).unwrap();
let _ = stream.write(&res_str.as_bytes());
},
Err(e) => {
println!("Error parsing\n{:?}", e);
}
}
let _ = stream.write(&buf);
},
[n] => {
println!("read {n}");
big_buf.push(n);
}
}
} else {
break;
}
}
},
Err(e) => panic!("{:?}", e)
}
});
}
Ok(())
}