farver 3.1.0

A Rust color library with easy transformation of colors with less functions.
Documentation
# farver

[![css-colors](https://docs.rs/farver/badge.svg)](https://docs.rs/farver)

A Rust converter to transform CSS colors. 🎨

## Installation

Add the `farver` crate to your `Cargo.toml`'s list of dependencies:
```rust
[dependencies]
farver = "3.1.0"
```

## What is farver?

This crate allows you to create and manipulate colors using `Less` functions, and to be able to use a common color type if you need 
to convert to interact with multiple crates

The RGB color model is often useful when you'd like to represent a color using a certain amount of red, green, and blue.
```css
background-color: rgb(255, 99, 71); // tomato
```
However, it is also possible to represent the same color using the HSL color model, which specifies the hue, saturation, and luminosity of a color:
```css
background-color: hsl(9, 100%, 64%); // also tomato!
```

You can also use CSS preprocessors like [Less](http://lesscss.org) to manipulate these colors in interesting ways.
```css
$tomato: hsl(9, 100%, 64%); // equivalent to rgb(255, 99, 71)
$dark-tomato: darken($tomato, 20%); // hsl(9, 100%, 44%)
$desaturated-tomato: desaturate($tomato, 40%); // hsl(9, 60%, 64%)
```

This crate allows you to perform operations that map to Less' [color operations API](http://lesscss.org/functions/#color-operations). These operations can be applied on both RGB & HSL color models.

## Examples

Represent colors as a valid CSS string:
```rust
use farver::{Color, rgb, hsla};

let salmon = rgb(250, 128, 114);
let chartreuse = hsla(90, 100, 50, 1.0);

assert_eq!(salmon.to_css(), "rgb(250, 128, 114)");
assert_eq!(chartreuse.to_css(), "hsla(90, 100%, 50%, 1.00)");
```

Convert between different color model representations:
```rust
use farver::{Color, rgb, rgba, hsl, hsla};

let chartreuse = rgb(127, 255, 0);

assert_eq!(chartreuse.to_hsl(), hsl(90, 100, 50));
assert_eq!(chartreuse.to_hsla(), hsla(90, 100, 50, 1.0));
assert_eq!(chartreuse.to_rgba(), rgba(127, 255, 0, 1.0));
```

Manipulate single colors to create new color model representations:
```rust
use farver::{Color, hsl, percent};

let chartreuse = hsl(90, 100, 50);

assert_eq!(chartreuse.darken(percent(20)), hsl(90, 100, 30));
assert_eq!(chartreuse.desaturate(percent(20)), hsl(90, 80, 50));
assert_eq!(chartreuse.greyscale(), hsl(90, 0, 50));
```

Manipulate multiple colors to create new color model representations:
```rust
use farver::{Color, rgb, rgba, hsl, hsla, percent};

let chartreuse = hsl(90, 100, 50);
let red = rgba(100, 0, 0, 1.0);

assert_eq!(
    chartreuse.mix(red, percent(50)).to_css(),
    "hsla(67, 98%, 25%, 1.00)"
);
assert_eq!(chartreuse.tint(percent(50)).to_css(), "hsl(90, 100%, 75%)");
assert_eq!(chartreuse.shade(percent(50)).to_css(), "hsl(90, 98%, 25%)");
```

Check out the [documentation](https://docs.rs/farver) to learn more about what color operations are available to use!

## Helpful Links

The following links may be helpful while using this crate.

1. CSS3's [RGB color model]https://www.w3.org/TR/css-color-3/#rgb-color
2. CSS3's [HSL color model]https://www.w3.org/TR/css-color-3/#hsl-color
3. Less' [color operation functions]http://lesscss.org/functions/#color-operations

## Contributing

### Installation

* `git clone https://github.com/nyxkrage/farver`
* `cd farver`
* `cargo build`

### Linting + plugins

Please use the below tools to ensure code consistency when contributing to this crate.
* [Rustfmt]https://github.com/rust-lang-nursery/rustfmt for formatting code style

### Building + testing

* `cargo build` – Builds the crate
* `cargo test` – Runs the test suite

## License

This project is licensed under the [ISC License](LICENSE).