Skip to content

Commit 3d76242

Browse files
committed
Save flags
1 parent 2f67d18 commit 3d76242

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

toycached/src/main.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
use std::collections::HashMap;
2-
use std::io::{self, BufRead, BufReader, Read, Write, IoSlice};
2+
use std::io::{self, BufRead, BufReader, Read, Write};
33
use std::net::{TcpListener, TcpStream};
44
use std::thread;
55

66
const MAX_READ_SIZE: u64 = 1024;
77

8+
struct Item {
9+
data: Vec<u8>,
10+
flags: u32,
11+
}
12+
813
fn process_command(
9-
db: &mut HashMap<String, Vec<u8>>,
14+
db: &mut HashMap<String, Item>,
1015
mut reader: impl BufRead,
1116
mut writer: impl Write,
1217
buffer: &mut String,
@@ -29,14 +34,9 @@ fn process_command(
2934
anyhow::bail!("missing argument: `key`");
3035
};
3136
match db.get(key) {
32-
Some(data) => {
33-
let header = format!("VALUE {} {} {}\r\n", key, 0, data.len());
34-
let resp = [
35-
header.as_bytes(),
36-
&data[..],
37-
b"\r\n",
38-
b"END\r\n",
39-
].concat();
37+
Some(item) => {
38+
let header = format!("VALUE {} {} {}\r\n", key, item.flags, item.data.len());
39+
let resp = [header.as_bytes(), &item.data[..], b"\r\n", b"END\r\n"].concat();
4040
writer.write_all(&resp)?;
4141
}
4242
None => {
@@ -51,7 +51,7 @@ fn process_command(
5151
let Some(flags) = iter.next() else {
5252
anyhow::bail!("missing argument: `flags`");
5353
};
54-
let Ok(_flags) = flags.parse::<u32>() else {
54+
let Ok(flags) = flags.parse::<u32>() else {
5555
anyhow::bail!("`flags` must be a 32-bit unsigned integer");
5656
};
5757
let Some(exptime) = iter.next() else {
@@ -77,7 +77,8 @@ fn process_command(
7777
anyhow::bail!("parse error");
7878
}
7979

80-
db.insert(key.to_owned(), data);
80+
let item = Item { data, flags };
81+
db.insert(key.to_owned(), item);
8182

8283
writer.write_all(b"STORED\r\n")?;
8384
}
@@ -90,7 +91,7 @@ fn process_command(
9091
}
9192

9293
fn handle_client(client: TcpStream) -> anyhow::Result<()> {
93-
let mut db: HashMap<String, Vec<u8>> = HashMap::new();
94+
let mut db: HashMap<String, Item> = HashMap::new();
9495
let mut reader = BufReader::new(&client);
9596
let mut buffer = String::new();
9697

0 commit comments

Comments
 (0)