#typenum #proc-macro #mapping #own #generate #type #u-int

typenum_mappings

一个proc-macro,用于将typenum的UInt类型映射到您的自定义类型

1 个不稳定版本

0.1.0 2024年6月15日

1892开发工具

Download history 233/week @ 2024-06-09 98/week @ 2024-06-16 16/week @ 2024-06-23 22/week @ 2024-06-30 88/week @ 2024-07-07 122/week @ 2024-07-14 53/week @ 2024-07-21 166/week @ 2024-07-28

每月431 次下载
用于 aformat

MIT 许可证

10KB
145

typenum_mappings

一个proc-macro,用于将typenum的UInt类型映射到您的自定义类型。

通过cargo doc --open --no-depsdocs.rs阅读文档。

最低支持的Rust版本

目前为1.63,提高版本被认为是破坏性的。


lib.rs:

一个proc-macro,用于将typenum的UInt类型映射到您的自定义类型。

当在稳定版上模拟const_generic_exprs时,这很有用,作为将const泛型转换为typenum类型的过程的第三步

  1. 将const泛型转换为typenum类型
  2. 通过typenum类型执行表达式
  3. 将这些typenum类型转换回结果类型

示例 - concat_array

use std::ops::Add;

use typenum::{U, ToUInt, Const};

trait ArrayLike {
    fn new() -> Self;
}

impl<T: Default, const N: usize> ArrayLike for [T; N] {
    fn new() -> Self {
        std::array::from_fn(|_| T::default())
    }
}

trait TypenumToArray<T> {
    type Array: ArrayLike;
}

typenum_mappings::impl_typenum_mapping!(
    impl<const N: usize = 0..=1000, T: Default> TypenumToArray<T> for #TypeNumName {
        type Array: = [T; N];
    }
);


type RunAdd<T1, T2> = <T1 as Add<T2>>::Output;
type RunTypeToArray<T, N> = <N as TypenumToArray<T>>::Array;

fn concat_array<const N1: usize, const N2: usize, T>(a1: [T; N1], a2: [T; N2]) -> RunTypeToArray<T, RunAdd<U<N1>, U<N2>>>
where
    Const<N1>: ToUInt,
    Const<N2>: ToUInt,

    U<N1>: Add<U<N2>>,
    <U<N1> as Add<U<N2>>>::Output: TypenumToArray<T>
{
    todo!()
}

let out = concat_array([1, 2, 3], [4, 5, 6]);
assert_eq!(out.len(), 6);

最低支持的Rust版本

目前为1.63,提高版本被认为是破坏性的。

依赖项

~0.4–0.9MB
~20K SLoC