# ![GRADIFF](./logo.svg)
The Reference Implementation for the GRADIFF File Format

[![Status: Active](./badges/status-active.svg)](#)
[![Crate: gradiff](./badges/crate-gradiff.svg)](https://crates.io/crates/gradiff)
[![API Reference](./badges/docs-apireference.svg)](https://docs.rs/crate/gradiff)
[![Issue Tracker](./badges/community-issuetracker.svg)](https://codeberg.org/gradis/gradiff-rs/issues)
[![License: Apache v2.0](./badges/license-apache20.svg)](#copyright)
[![Badges made with ./badges](./badges/dotslash-badges.svg)](https://codeberg.org/lhinderberger/dot-slash-badges)

## Summary
gradiff-rs is the Rust-based reference implementation for the GRADIFF file
format. It consists of the `gradiff` library crate under the `lib` subdirectory,
and a CLI under the `cli` subdirectory.
The library consists of the `codec` module, which is responsible for
en- and decoding GRADIFF files syntactically, the `model` module, which
validates GRADIFF files semantically and aggregates GRADIFF Changes and
the `render` module, which renders a view of a GRADIFF diagram to SVG.

SVG is the canonical render format for GRADIFF diagrams. Rasterized renders of
GRADIFF diagrams should be accomplished using a compliant SVG rendering library,
which is not part of (and out of scope for) gradiff-rs.

## Specification
The specification of the GRADIFF file format can be found in the
[GRADIFF Repository](https://codeberg.org/gradis/gradiff-spec).

## Contributing
Feel free to contribute by posting issues on this repository's
[Issue Tracker](https://codeberg.org/gradis/gradiff-rs/issues).

Please note that pull requests are only accepted if they are in line with the
licensing of the rest of the project (see below). Please make sure to add your
name and email address to the list of contributors in the header of the files
that you created or modified (or their corresponding `.license` files).

## Versioning and Compatibility
Versioning of gradiff-rs follows the [Semantic Versioning](https://semver.org)
convention.

Until 1.0.0, any substantial changes to the library (breaking and non-breaking)
will trigger an increase of the minor version, while bug fixes and similar minor
improvements may trigger an increase of the patch version.

<a id="copyright"></a>
## Copyright and Licensing
gradiff-rs is (C) 2022-2023 The GRADIS Project Contributors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

For details, please refer to the [LICENCE file](LICENSE.txt).

## Maintainer and Contact
gradiff-rs is maintained by Lucas Hinderberger.

You can contact the maintainer via email at lhinderberger@gradis-project.org

The repository of gradiff-rs can be found at
https://codeberg.org/gradis/gradiff-rs

You're welcome to file issues and pull requests there.
