start is_prime challenge
This commit is contained in:
parent
1d5a1aa2b1
commit
34487833bd
3 changed files with 154 additions and 0 deletions
82
Cargo.lock
generated
82
Cargo.lock
generated
|
@ -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"
|
||||
|
|
|
@ -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
70
src/bin/is_prime.rs
Normal 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(())
|
||||
}
|
Loading…
Add table
Reference in a new issue