Crates.io | copy_impl |
lib.rs | copy_impl |
version | 0.3.3 |
source | src |
created_at | 2024-03-30 00:26:36.606042 |
updated_at | 2024-03-30 01:16:08.165179 |
description | Macro for effortlessly duplicating impl block code across various types in Rust. |
homepage | https://github.com/clucompany/copy_impl.git |
repository | https://github.com/clucompany/copy_impl.git |
max_upload_size | |
id | 1190682 |
size | 39,296 |
Add this to your Cargo.toml:
[dependencies]
copy_impl = "0.3.3"
and this to your source code:
use copy_impl::copy_impl;
use std::{error::Error, fmt::Write};
use copy_impl::copy_impl;
struct CustomNum<T>(T);
struct UncheckedCustomNum<T>(T);
copy_impl! {
impl (CustomNum<i8>),
impl (CustomNum<i16>),
impl (CustomNum<i32>),
impl (UncheckedCustomNum<i8>),
impl (UncheckedCustomNum<i16>) {
pub fn write_to(&self, mut w: impl Write) -> Result<(), std::fmt::Error> {
write!(w, "{}", self.0)
}
}
}
fn main() -> Result<(), Box<dyn Error>> {
let mut tbuff = String::new();
CustomNum(1i8).write_to(&mut tbuff)?;
CustomNum(2i16).write_to(&mut tbuff)?;
CustomNum(3i32).write_to(&mut tbuff)?;
UncheckedCustomNum(4i8).write_to(&mut tbuff)?;
UncheckedCustomNum(5i16).write_to(&mut tbuff)?;
// UncheckedCustomNum(6i32).write_to(&mut tbuff)?;
/*
no method named `write_to` found for struct `UncheckedCustomNum<i32>` in the current scope
the method was found for
- `UncheckedCustomNum<i8>`
- `UncheckedCustomNum<i16>`
*/
assert_eq!(tbuff, "12345");
Ok(())
}
See all
This project has a dual license according to (LICENSE-MIT) and (LICENSE-APACHE-2-0).