pair_macro crates.io Build Status

Create types consisting of the same type values such that Pair, Triplet, and so on.

This crate runs on no-std environment.

Examples

Use a provided type Pair<T>.

```rust use pair_macro::Pair;

let p = Pair::new(1.0, 2.0); // Pair let q = p.map(|v| v * 2.0);

assert_eq!(Pair::new(2.0, 4.0), q);

// Pair<T> has x and y fields asserteq!(2.0, q.x); asserteq!(4.0, q.y); ```

Create a new pair type.

```rust use pairmacro::createpair_prelude::*;

create_pair!(MyOwnPair; a, b, c, d);

let p = MyOwnPair::new(1, 2, 3, 4); // MyOwnPair let q = MyOwnPair::new(5, 6, 7, 8); let r = p + q;

// MyOwnPair<T> has a, b, c and d fields asserteq!(6, r.a); asserteq!(8, r.b); asserteq!(10, r.c); asserteq!(12, r.d); ```

Use provided methods

```rust use core::str::FromStr; use pair_macro::Pair;

let p = Pair::new(["hello", "42"], ["world", "58"]); // Pair<[&str; 2]> let value = p .asref() // Pair<&[&str; 2]> .map(|strs| strs[1]) // Pair<&str> .map(i32::fromstr) // Pair> .intoresult() // Result, Error> .unwrap() // Pair .intoiter() // Iterates each value in the pair (42 and 58 in this situation) .sum::(); // 42 + 58

assert_eq!(100, value); ```

Of course, your original pair types defined by create_pair! macro have the same methods.

Features

Pair types support serde by enabling serde feature: in your Cargo.toml,
pair_macro = { version = "0.1.4", features = ["serde"] }

Note

Pair types' documentation may be slightly hard to read since it is generated by macro expansion.

License: MIT