# Fej Fej is an API written in Rust. I started this project to learn the language, and really just have some fun. ## 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`. Each module contains the following base files: * `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. ## Roadmap 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. A [Makefile wrapper](Makefile) is provided for ease of use. Do check it out, as all the commands are documented for your understanding ;) 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`. tl;dr run `make run` to run your build, and `make test` to run the tests. ## Docker images The images are available [here](https://hub.docker.com/r/chewingbever/fej).