2023-12-07 00:12:28 +01:00
< h1 align = "center" > FileFormats< / h1 >
< p align = "center" >
2024-01-27 19:49:31 +01:00
< strong > Documentation and < a href = "https://www.rust-lang.org/" > Rust< / a > Implementation to learn how most famous file formats store data.< / strong >
2023-12-07 00:12:28 +01:00
< / p >
< p align = "center" >
2024-01-27 19:49:31 +01:00
< a href = "./CONTRIBUTING.md" > < img src = "https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt = "CONTRIBUTING" / > < / a >
< a href = "./LICENSE" > < img src = "https://img.shields.io/badge/licence-MIT-blue.svg" alt = "Licence MIT" / > < / a >
< a href = "./CODE_OF_CONDUCT.md" > < img src = "https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt = "Contributor Covenant" / > < / a >
< br / >
< a href = "https://www.rust-lang.org/" > < img src = "https://img.shields.io/badge/Rust%20MSRV-v1.74.0-blue?logo=rust" alt = "Rust" / > < / a >
< a href = "https://conventionalcommits.org" > < img src = "https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt = "Conventional Commits" / > < / a >
< / p >
< p align = "center" >
< img src = "./documentation/images/logo.png" width = "200px" alt = "FileFormats Logo" / >
2023-12-07 00:12:28 +01:00
< / p >
---
2024-01-27 19:49:31 +01:00
## 📜 About
2023-12-07 00:12:28 +01:00
- [Documentation ](./documentation/ ): Explains the theory for each file format, the advantages and disadvantages compared to other file formats in the same category, why it is stored in that way, and the **User Manual** for the implementation.
- [`fileformats` Implementation ](./src/ ): **Command-Line Interface and Rust Library** to cover most common features of each file format, and understand practically how the theory works. The features of the implementation include, but is not limited to, **read, write, convert, and compare** between file formats.
## Getting Started
### Prerequisites
2024-01-27 19:49:31 +01:00
#### Rust Toolchain
The current Minimum Supported [Rust ](https://www.rust-lang.org/ ) Version (MSRV) is **v1.74.0** .
The project is **tested** against the following Rust versions:
- **Minimum Supported Rust Version (MSRV): v1.74.0**
- **Latest Stable Version**
#### Rust Globally Installed Crate
2024-01-27 19:57:06 +01:00
The project requires [cargo-run-bin v1.7.2 ](https://crates.io/crates/cargo-run-bin ) to be installed globally.
It can be installed using the following command:
```sh
cargo install cargo-run-bin@1.7.2
```
2024-01-27 19:49:31 +01:00
#### External Linting Tools (optional)
2023-12-07 00:12:28 +01:00
2024-02-08 21:33:35 +01:00
**External linting tools** are used to ensure a consistent code style (external to Rust) and commit message format. They are **used in the Continuous Integration (CI)** pipeline and **can be optionally used locally** .
2024-01-27 19:49:31 +01:00
They have to be installed using [Node.js ](https://nodejs.org/ ) >= v20.0.0 and [npm ](https://www.npmjs.com/ ) >= v10.0.0.
2024-02-08 21:33:35 +01:00
```sh
npm clean-install
```
2024-01-27 19:49:31 +01:00
### Usage
2023-12-07 00:12:28 +01:00
```sh
# Run `fileformats` CLI
2024-01-27 20:00:42 +01:00
cargo run -- --help
2023-12-07 00:12:28 +01:00
# Documentation
cargo bin mdbook serve
2024-02-08 21:33:35 +01:00
# Build, Lint, and Test Usage
2023-12-07 00:12:28 +01:00
cargo build
cargo test
cargo clippy --verbose -- -D warnings
cargo fmt -- --check
2024-01-27 19:49:31 +01:00
# External Linting Tools Usage (optional)
2024-02-08 21:33:35 +01:00
echo 'chore: try commitlint' | npm run lint:commit
npm run lint:editorconfig
npm run lint:markdown
npm run lint:prettier
2023-12-07 00:12:28 +01:00
```
2024-01-27 19:49:31 +01:00
## 💡 Contributing
Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake.
The steps to contribute can be found in the [CONTRIBUTING.md ](./CONTRIBUTING.md ) file.
## 📄 License
[MIT ](./LICENSE )