summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rust_decimal/BUILD.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /third_party/rust/rust_decimal/BUILD.md
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/rust_decimal/BUILD.md')
-rw-r--r--third_party/rust/rust_decimal/BUILD.md112
1 files changed, 112 insertions, 0 deletions
diff --git a/third_party/rust/rust_decimal/BUILD.md b/third_party/rust/rust_decimal/BUILD.md
new file mode 100644
index 0000000000..2e46288332
--- /dev/null
+++ b/third_party/rust/rust_decimal/BUILD.md
@@ -0,0 +1,112 @@
+Developing Rust Decimal
+=======================
+
+* [Setup](#setup)
+* [Building](#building)
+* [Library Versioning](#library-versioning)
+* [Formatting / Code Style](#formatting--code-style)
+* [Testing](#testing)
+* [Fuzzing](#fuzzing)
+* [Benchmarking](#benchmarking)
+* [Code Coverage](#code-coverage)
+
+## Setup
+
+Rust Decimal leverages [cargo make](https://github.com/sagiegurari/cargo-make) to ensure a consistent build/test/release
+approach. This also handles installing any additional dependencies in order to execute various commands, making getting set
+up and going relatively straight forward and easy.
+
+Installing this can be done using `cargo`:
+
+```shell
+cargo install --force cargo-make
+```
+
+Once this has been installed, common tasks can be initiated with the `makers` command.
+
+## Building
+
+**Useful Make Commands:** `makers build`
+
+Building this library doesn't require any special commands and can be performed using a standard `cargo build`.
+
+### Building no-std
+
+Builds by default leverage `std`. To disable this functionality you can build Rust Decimal without any default features
+enabled:
+
+```shell
+cargo build --no-default-features
+```
+
+## Library Versioning
+
+**Useful Make Commands:** `makers outdated`
+
+The general rule of thumb with Rust Decimal is to ensure that downstream dependencies are kept up to date, so long as they
+align with the minimum requirements of the Rust Decimal build system. As a helpful measure, a `makers` command has been created
+to identify any outdated dependencies within the project. On a regular basis this command is run and results evaluated for potential
+updates to be applied.
+
+Please note: because this is a library, the `Cargo.lock` file is not committed into the repository. This means that `cargo update`
+should be run before running `makers outdated`.
+
+## Formatting / Code Style
+
+**Useful Make Commands:** `makers format`, `makers clippy`
+
+To maintain consistent styling across the project, both `clippy` and `cargo fmt` are used. Github actions will
+check for consistent styling upon pull request however it is recommended that both of these commands are run before creating
+a PR.
+
+## Testing
+
+**Useful Make Commands:** `makers test-all`, `makers test-no-std`, `makers test-maths`, `makers test-serde`, `makers test-db`
+
+Testing is a critical part of the Rust Decimal development lifecycle. It helps ensure that the library is behaving correctly under
+a mixture of different inputs and feature configurations.
+
+There are many different test configurations defined in `Makefile.toml` to help ensure that common test cases are easy to execute locally.
+For the full complete list, please review `Makefile.toml` directly for all `test-*` tasks. Some useful test tasks are listed below:
+
+* `test-all`: Tests all test configurations against all features
+* `test-default`: Test the default configuration
+* `test-no-std`: Test the library against a `no-std` build
+* `test-maths`: Test the maths feature of the library using both legacy and default ops.
+* `test-serde`: Test serialization and deserialization using a mixture of serde features
+* `test-db`: Test a variety of database logic changes, including `diesel` and `postgres` configurations.
+
+When adding new features, please make sure to generate new tasks within the `Makefile.toml` to ensure continued
+coverage of your feature going forward.
+
+### Generated tests
+
+Rust Decimal includes a number of generated tests that have been generated outside the scope of this project. These are
+effectively CSV files that use randomized data for the `lo`, `mid` and `hi` portions of the Decimal number.
+
+Modification of these files is restricted and should not be committed. If you would like to add further generated tests then
+please create new files as you see fit.
+
+## Fuzzing
+
+**Useful Make Commands:** `makers fuzz`
+
+Rust Decimal includes some fuzz testing support also to help capture a wider range of testing scenarios. These can be
+run by using `makers fuzz`.
+
+## Benchmarking
+
+**Useful Make Commands:** `makers bench`
+
+In order to ensure that Rust Decimal runs quickly, a number of benchmarks have been created and can be executed using
+`makers bench`.
+
+When adding new benchmarking configurations, please ensure that you add a corresponding `Makefile.toml` task to capture the
+updated configuration.
+
+## Code Coverage
+
+**Useful Make Commands:** `makers coverage`, `makers codecov-open`
+
+Limited code coverage support has been added to Rust Decimal using `gcov`. A code coverage report
+can be generated by running `makers coverage`. Once generated, the report can be opened using `makers codecov-open`.