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,26 +293,30 @@ impl Command {
state = CreateParserState::ColumnDefinitionEnd; state = CreateParserState::ColumnDefinitionEnd;
} }
CreateParserState::ColumnDefinitionEnd => { CreateParserState::ColumnDefinitionEnd => {
let column_def = ColumnDefinition { if let Some(data_type_val) = data_type {
data_type: data_type.unwrap(), let column_def = ColumnDefinition {
length, data_type: data_type_val,
name: col_name, length,
}; name: col_name,
};
length = 0; length = 0;
col_name = String::new(); col_name = String::new();
data_type = None; data_type = None;
col_defs.push(column_def); col_defs.push(column_def);
match token.as_str() { match token.as_str() {
"," => { "," => {
state = CreateParserState::ColumnName; state = CreateParserState::ColumnName;
}
")" => {
state = CreateParserState::Semicolon;
}
_ => return Err(anyhow!("Expected end")),
} }
")" => { } else {
state = CreateParserState::Semicolon; return Err(anyhow!("Could not find datatype for column {}", col_name));
}
_ => return Err(anyhow!("Expected end")),
} }
} }
CreateParserState::Semicolon => { CreateParserState::Semicolon => {

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"))
}
} }
} }
} }