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
Please don’t use pointers in Rust!
Anyways, my feedback:
Your http module just wraps another inline module, this is unnecessary. Usually inline modules are only useful for tests. Your readline implementation doesn’t account for systems with two-character line endings (Windows and DOS) and I’m also unclear on why you need that for stdin.
Concerning http in the standard library, Rust has learned from the mess in python, which has multiple implementations in the standard library that are all outdated but can’t be updated due to needing to handle backwards compatibility. Rust only has the basic stuff there, and handles other needs by external dependencies, which are managed by a great package manager (again, unlike python) on crates.io.
I’m surprised that you’re surprised that there’s not http servers in the standard library
I guess that it makes sense. I’ve been doing Go for the past two years.
You’re not crazy. HTTP is commonly part of standard libraries nowadays.
Only in languages that do not consider long term support before adding stuff to the standard library.
There really isn’t a good reason to add things like protocols that change significantly over time in a standard library.
I doubt TCP/UDP or basic HTTP requests will change much, but I guess it depends on how high-level the API is.