Greetings to all.
I have spent the last couple of evenings learning about Rust and trying it out. Wrote a simple cli calculator as a first thing and thought I would improve it by making it available over http.
I was actually a bit surprised to find that there was no http tooling in the standard library, and searching online gave me an overload of information on different libraries and frameworks.
I ended up implementing my own simple HTTP server, might as well as this is a learning project.
Now I have it working, and while it isn’t perfect or done, I thought that this would be a good time to check what things I am doing wrong/badly.
Which is why I am here, would love to get some pointers on it all to make sure I am going in the right direction in the future.
The project is hosted here: https://github.com/Tebro/rsimple_http


My quick notes which are tailored to beginners:
Use
Option::ok_or_else()andResult::map_err()instead oflet .. else.let .. elsedidn’t always exist. And you might find that some old timers are slightly triggered by it.Options as iterators (yesOptions are iterators).?operator and theTrytraitType inference and generic params
let headers: HashMap = header_pairs .iter() .map(|line| line.split_once(":").unwrap()) .map(|(k, v)| (k.trim().to_string(), v.trim().to_string())) .collect();(Borken sanitization will probably butcher this code, good thing the problem will be gone in Lemmy 0.19)
Three tips here:
headerswill be returned as a struct field, the type of which is already known.collect()itself. That may prove useful in other scenarios.Result/Optionif the iterator items areResults/Options. So that.unwrap()is not an ergonomic necessity 😉Minor point
.into()or.to_owned()for&str => Stringconversions.make good use of the crate echo system
httpcrate is the compatibility layer used HTTP rust implementations. Check it out and maybe incorporate it into your experimental/educational code.Alright, I will stop myself here.
Thanks! Really good points here, will have to find some time to apply them.