#impl #macro #auto #ref #str #as-ref-t

auto_ref

将 &T 替换为 impl AsRef<T>

3个版本

0.1.2 2022年6月19日
0.1.1 2022年6月19日
0.1.0 2022年6月18日

#1445 in 进程宏

MIT/Apache

12KB
180

auto_ref

用于将引用参数 &T 替换为 impl AsRef<T>impl Borrow<T>

用法

use auto_ref::{auto_ref, auto_borrow};

#[auto_ref]
fn example1(s: &str, t: &mut str) {
    println!("{}, {}", s, t);
}

#[auto_borrow]
fn example2(s: &str, t: &mut str) {
    println!("{}, {}", s, t);
}

#[auto_ref(s)]
#[auto_borrow(t)]
fn example3(s: &str, t: &str) {
    println!("{}, {}", s, t);
}

上述代码转换为

fn example1(s: impl ::core::convert::AsRef<str>, t: impl ::core::convert::AsMut<str>) {
    let s: &str = s.as_ref();
    let t: &mut str = t.as_mut();
    println!("{}, {}", s, t);
}

fn example2(s: impl ::core::borrow::Borrow<str>, t: impl ::core::borrow::BorrowMut<str>) {
    let s: &str = s.borrow();
    let t: &mut str = t.borrow_mut();
    println!("{}, {}", s, t);
}

fn example3(s: impl ::core::convert::AsRef<str>, t: impl ::core::borrow::Borrow<str>) {
    let t: &str = t.borrow();
    let s: &str = s.as_ref();
    println!("{}, {}", s, t);
}

依赖项

~1.5MB
~35K SLoC