# gix-config

**gix-config is a library for interacting with `git-config` files.**

This crate intents to be a performant Rust implementation for reading and
writing `git-config` files. It exposes tiers of abstractions, from simple
config value wrappers to a high level reader and writer.

The highlight of this crate is the zero-copy parser. We employ techniques to
avoid copying where necessary, and reads that do not need normalization are
guaranteed to be zero-copy. Higher level abstractions maintain this guarantee,
and utilizes acceleration structures for increased performance.

Currently, this is _not_ a binary. While we do intent to have a drop-in
replacement for the `git config` sub-command, we're currently missing
system-level abstractions to do so.

## Contributing

Contributions are always welcome!

### Code quality

This repository enables pedantic, cargo, and nursery `clippy` lints. Make sure
to run `cargo clean && cargo clippy` (the clean stage is very important!) to
ensure your code is linted.

### Testing

Since this is a performance oriented crate, in addition to well tested code via
`cargo test`, we also perform benchmarks to measure notable gains or losses in
performance. We use [`criterion`] so benches can be run via `cargo bench` after
installing it via `cargo install cargo-criterion`.

Changes to parsing code may include a request to fuzz to ensure that it cannot
panic on inputs. This can be done by executing `cargo +nightly fuzz run parse` after
installing the `fuzz` sub-command via `cargo install cargo-fuzz`.

#### License

<sup>
Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
</sup>

<br>

<sub>
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in gix-config by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.
</sub>

[`criterion`]: https://github.com/bheisler/criterion.rs
