1 unstable release
0.1.0 | Jun 3, 2023 |
---|
#2603 in Rust patterns
9KB
typechain
This crate provides procedural macros for generating chains of related traits in Rust.
Example
types.rs
use typechain::{chainlink, chain};
chainlink!(Currency => {
const usd_value: f64;
});
chain!(Fiat => {
@Currency
const usd_value: f64;
});
impl Fiat {
pub fn new(usd_value: f64) -> Self {
Self { usd_value }
}
}
chain!(Crypto => {
@Currency
const usd_value: f64;
});
impl Crypto {
pub fn new(usd_value: f64) -> Self {
Self { usd_value }
}
}
main.rs
use typechain::use_chains;
mod types;
use types::{Fiat, Crypto};
use_chains![types::Currency];
fn main() {
let usd = Fiat::new(1.0);
let btc = Crypto::new(10000.0);
let currencies: Vec<&Currency> = vec![&usd, &btc];
}
lib.rs
:
typechain
This crate re-exports the typechain
macros. In the
future, it may also contain other utilities for
working with typechain
-generated code.
Usage
use typechain::{chainlink, chain};
chainlink!(Foo => {
const foo: u32;
});
chain!(Bar => {
@Foo
const foo: u32;
});
chain!(Baz => {
@Foo
const foo: u32;
});
let bar = Bar { foo: 42 };
let baz = Baz { foo: 97 };
let foos: Vec<&Foo> = vec![&bar, &baz];
Dependencies
~0.4–0.8MB
~19K SLoC