[#26] Moved lib & bin to own folders; Moved server tests; wrote some readmes
parent
4b51ee20ca
commit
45c4a4e257
11
Cargo.toml
11
Cargo.toml
|
@ -6,7 +6,7 @@ edition = "2018"
|
|||
|
||||
[lib]
|
||||
name = "fej"
|
||||
src = "src/lib.rs"
|
||||
path = "src/fej/lib.rs"
|
||||
test = true
|
||||
bench = true
|
||||
doc = true
|
||||
|
@ -14,10 +14,11 @@ doctest = true
|
|||
|
||||
[[bin]]
|
||||
name = "server"
|
||||
src = "src/bin/server/main.rs"
|
||||
test = false
|
||||
bench = false
|
||||
doc = false
|
||||
path = "src/server/main.rs"
|
||||
test = true
|
||||
bench = true
|
||||
doc = true
|
||||
doctest = true
|
||||
|
||||
[dependencies]
|
||||
rocket = "0.4.7"
|
||||
|
|
60
README.md
60
README.md
|
@ -1,25 +1,21 @@
|
|||
# Fej
|
||||
|
||||
Fej is an API written in Rust. I started this project to learn the language,
|
||||
and really just have some fun.
|
||||
Fej is a RESTful API that does lots of different things. It started as an
|
||||
experiment to learn Rust, but has grown into a full-on passion project.
|
||||
|
||||
## Project Structure
|
||||
|
||||
The folder structure follows the structure of the URLs, e.g. the route for
|
||||
`/hello/world` is found in the module `src/hello`.
|
||||
The bulk of the project consists of the main `fej` library. The `src` folder
|
||||
contains the `lib.rs` file for this library, and all other binaries import from
|
||||
this main library.
|
||||
|
||||
Each module contains the following base files:
|
||||
All binaries can be found in [`/src/bin`](src/bin), with the biggest one being
|
||||
`server`. This is what actually runs as the Rocket.rs server. The other
|
||||
binaries (with more possibly coming) are utility tools that will most likely be
|
||||
run as cron jobs inside the containers, e.g. scrapers.
|
||||
|
||||
* `mod.rs`: defines the modules' content, and contains the route definitions.
|
||||
The route functions themselves only contain the functionality needed to
|
||||
represent the data, not acquire it.
|
||||
* `controller.rs`: this file contains the actual logic of each route. If the
|
||||
logic becomes too complicated to be contained inside a single file,
|
||||
`controller.rs` becomes its own module folder named `controller`.
|
||||
* `tests.rs`: this contains tests for the specific module. This can also be a
|
||||
module directory if need be.
|
||||
|
||||
Every module has a `routes` function that returns its route macros.
|
||||
Version 1.1 also introduces the use of a database, namely
|
||||
[PostgreSQL 13](https://www.postgresql.org/).
|
||||
|
||||
## Roadmap
|
||||
|
||||
|
@ -27,19 +23,33 @@ See [roadmap.md](roadmap.md).
|
|||
|
||||
## Development
|
||||
|
||||
The entire toolchain runs on Alpine inside Docker. This makes building easier,
|
||||
and (hopefully) eliminates any system-specific bugs.
|
||||
To make development more consistent (and keep my computer a bit cleaner) I've
|
||||
decided to run the entire toolchain using Docker, with Alpine Linux base
|
||||
images. This also allows me to make really small final images. Technically,
|
||||
Docker is the only dependency you need to contribute to this project
|
||||
(not accounting for language servers etc.).
|
||||
|
||||
A [Makefile wrapper](Makefile) is provided for ease of use. Do check it out, as
|
||||
all the commands are documented for your understanding ;)
|
||||
A [Bash script](fejctl) is provided to speed up development on the various
|
||||
binaries. It aids in starting up the containers, choosing which binary to run
|
||||
etc. A quick rundown of its most important features:
|
||||
|
||||
There's also the `build` script. This script does all the "heavy" lifting. It
|
||||
chooses which Dockerfile to build according to the given arguments, and
|
||||
generates tags for the images (useful when pushing releases). The Makefile is
|
||||
really just a wrapper around this build script, allowing you to write
|
||||
`make test` instead of `./build -m dev -a run test`.
|
||||
```bash
|
||||
# By default, it compiles the 'server' binary (but doesn't run it)
|
||||
./fejctl
|
||||
|
||||
tl;dr run `make run` to run your build, and `make test` to run the tests.
|
||||
# The first argument is the action you wish to perform, the second on which
|
||||
# binary (not all commands need a binary as input, so they just ignore it)
|
||||
# For example, this will run the binary called server
|
||||
./fejctl r server
|
||||
|
||||
# This runs the tests (all commands also have their full name if you want)
|
||||
./fejctl t
|
||||
./fejctl test
|
||||
|
||||
# These attach to the two containers
|
||||
./fejctl sh # Opens a new root shell inside the 'fej' container
|
||||
./fejctl psql # Open a new psql shell in the fej database
|
||||
```
|
||||
|
||||
## Docker images
|
||||
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
#[macro_use]
|
||||
extern crate rocket;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
mod catchers;
|
||||
mod routes;
|
||||
|
|
@ -3,7 +3,7 @@ use rocket::http::Status;
|
|||
use rocket::local::Client;
|
||||
|
||||
fn rocket() -> rocket::Rocket {
|
||||
rocket::ignite().mount("/", fej_lib::ivago::routes())
|
||||
rocket::ignite().mount("/", super::routes::ivago())
|
||||
}
|
||||
|
||||
/// Test 404 response
|
Loading…
Reference in New Issue