7 个版本
0.2.4 | 2024 年 3 月 29 日 |
---|---|
0.2.3 | 2022 年 5 月 14 日 |
0.2.2 | 2021 年 9 月 12 日 |
0.2.1 | 2021 年 5 月 23 日 |
0.1.1 | 2021 年 1 月 13 日 |
#359 在 Rust 模式
29,271 每月下载量
在 30 个 crate 中使用 (通过 repr_offset)
77KB
1.5K SLoC
此 crate 为类型级字符串提供了类型编码。
示例
索引
此示例演示了如何使用类型级字符串和 Index
特性通过名称访问泛型类型的字段。
use std::ops::Index;
use tstr::{TS, ts};
fn main(){
takes_person(&Person::new("Bob".into(), "Marley".into()));
takes_person(&OtherPerson::new("Bob", "Marley"));
}
fn takes_person<P>(pers: &P)
where
P: Index<TS!(name), Output = str> + Index<TS!(surname), Output = str>
{
assert_eq!(&pers[ts!(name)], "Bob");
assert_eq!(&pers[ts!(surname)], "Marley");
}
use person::Person;
mod person {
use std::ops::Index;
use tstr::TS;
pub struct Person {
name: String,
surname: String,
}
impl Person {
pub fn new(name: String, surname: String) -> Self {
Self{name, surname}
}
}
impl Index<TS!(name)> for Person {
type Output = str;
fn index(&self, _: TS!(name)) -> &str {
&self.name
}
}
impl Index<TS!(surname)> for Person {
type Output = str;
fn index(&self, _: TS!(surname)) -> &str {
&self.surname
}
}
}
use other_person::OtherPerson;
mod other_person {
use std::ops::Index;
use tstr::TS;
pub struct OtherPerson {
name: &'static str,
surname: &'static str,
}
impl OtherPerson {
pub fn new(name: &'static str, surname: &'static str) -> Self {
Self{name, surname}
}
}
impl Index<TS!(name)> for OtherPerson {
type Output = str;
fn index(&self, _: TS!(name)) -> &str {
self.name
}
}
impl Index<TS!(surname)> for OtherPerson {
type Output = str;
fn index(&self, _: TS!(surname)) -> &str {
self.surname
}
}
}
宏展开
此库保留在每个版本和 cargo 功能组合中如何表示内部类型级字符串的权利。
这只会影响您在从该 crate 生成的代码中展开宏并使用展开后的代码而不是通过宏的情况下。
Cargo 功能
-
"rust_1_46"
:在tstr::utils
中启用 const 函数,用于比较&str
和&[u8]
。 -
"cmp_traits"
:启用比较类型级字符串的特性。 -
"use_syn"
:更改将字面量传递给此 crate 的宏的方式,以使用syn
crate。如果有一些无法解析但有效的 str/integer 字面量,请使用此功能。 -
"min_const_generics"
:将类型级字符串的表示更改为使用多个char
const 参数,从而为非字母数字 ASCII 字符串提供更好的编译器错误。需要 Rust 1.51.0。 -
"const_generics"
:将类型级别字符串的表示更改为使用&'static str
常量参数,从而提高编译器错误提示的质量,并添加了一些新功能。截至 2023-03-17,此功能无法启用,因为它需要&'static str
能够稳定用作常量参数。如果无法使用此功能,请考虑使用"nightly_const_generics"
。 -
"nightly_const_generics"
:与"const_generics"
功能等价,并启用夜间编译器的功能以使用&'static str
常量参数。 -
"for_examples"
:启用for_examples
模块,其中包含一些在文档示例中使用的类型。
无标准支持
此crate无条件地使用 #![no_std]
,并可以在Rust可以使用的任何地方使用。
支持的最小Rust版本
此crate支持Rust 1.40.0及以后的版本。
依赖项
~215KB