remove unwraps

This commit is contained in:
Nicholas Orlowsky 2023-08-08 16:07:51 -05:00 committed by Nicholas Orlowsky
parent 7f85e2debf
commit 3d9c53237c
3 changed files with 38 additions and 28 deletions

View file

@ -139,28 +139,30 @@ fn run_command(query: String) -> ::anyhow::Result<String> {
} }
} }
fn handle_client(mut stream: TcpStream) { fn handle_client(mut stream: TcpStream) -> ::anyhow::Result<()> {
let mut data = [0_u8; BUFFER_SIZE]; let mut data = [0_u8; BUFFER_SIZE];
while match stream.read(&mut data) { while match stream.read(&mut data) {
Ok(_size) => { Ok(_size) => {
let query_string = String::from_utf8(data.to_vec()).expect("A UTF-8 string"); let query_string = String::from_utf8(data.to_vec())?;
let response: String = run_command(query_string).unwrap(); let response: String = run_command(query_string)?;
let response_data_size = response.len().to_le_bytes(); let response_data_size = response.len().to_le_bytes();
stream.write_all(&response_data_size).unwrap(); // send length of message stream.write_all(&response_data_size)?; // send length of message
stream.write_all(response.as_bytes()).unwrap(); // send message stream.write_all(response.as_bytes())?; // send message
true true
} }
Err(_) => { Err(_) => {
println!( println!(
"An error occurred, terminating connection with {}", "An error occurred, terminating connection with {}",
stream.peer_addr().unwrap() stream.peer_addr()?
); );
stream.shutdown(Shutdown::Both).unwrap(); stream.shutdown(Shutdown::Both)?;
false false
} }
} {} } {}
Ok(())
} }
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
@ -171,8 +173,9 @@ fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("0.0.0.0:5433")?; let listener = TcpListener::bind("0.0.0.0:5433")?;
for stream in listener.incoming() { for stream in listener.incoming() {
thread::spawn(|| { thread::spawn(|| -> ::anyhow::Result<()> {
handle_client(stream.expect("A valid stream")); handle_client(stream?)?;
Ok(())
}); });
} }

View file

@ -280,7 +280,7 @@ impl Command {
state = CreateParserState::ColumnDatatype; state = CreateParserState::ColumnDatatype;
} }
CreateParserState::ColumnDatatype => { CreateParserState::ColumnDatatype => {
let dtype = Datatype::parse_from_str(token).unwrap(); let dtype = Datatype::parse_from_str(token)?;
if dtype.has_len() { if dtype.has_len() {
state = CreateParserState::ColumnLength; state = CreateParserState::ColumnLength;
} else { } else {
@ -293,8 +293,9 @@ impl Command {
state = CreateParserState::ColumnDefinitionEnd; state = CreateParserState::ColumnDefinitionEnd;
} }
CreateParserState::ColumnDefinitionEnd => { CreateParserState::ColumnDefinitionEnd => {
if let Some(data_type_val) = data_type {
let column_def = ColumnDefinition { let column_def = ColumnDefinition {
data_type: data_type.unwrap(), data_type: data_type_val,
length, length,
name: col_name, name: col_name,
}; };
@ -314,6 +315,9 @@ impl Command {
} }
_ => return Err(anyhow!("Expected end")), _ => return Err(anyhow!("Expected end")),
} }
} else {
return Err(anyhow!("Could not find datatype for column {}", col_name));
}
} }
CreateParserState::Semicolon => { CreateParserState::Semicolon => {
if token != ";" { if token != ";" {

View file

@ -51,8 +51,11 @@ impl Datatype {
Ok(str_val) Ok(str_val)
} }
Datatype::Integer => { Datatype::Integer => {
let val = data_val.first().unwrap(); if let Some(val) = data_val.first() {
Ok(format!("{}", val)) Ok(format!("{}", val))
} else {
Err(anyhow!("Unable to parse Integer"))
}
} }
} }
} }