5次发布
0.1.4 | 2023年11月11日 |
---|---|
0.1.3 | 2022年9月19日 |
0.1.2 | 2022年9月14日 |
0.1.1 | 2022年9月12日 |
0.1.0 | 2022年9月12日 |
#55 in 值格式化
每月33次下载
用于 2 个Crates(通过 querio)
22KB
68 代码行
轻松访问字符串中的结构体字段
🐠 在 Cargo.toml
的依赖项中添加 strung
[dependencies]
strung = "0.1"
🦀 在rust中使用/导入预定义的所有内容
use strung::prelude::*;
🦊 对未命名字段有效
#[derive(Strung)]
struct Struct (&'static str, u32);
fn main(){
let s: String = Struct("Bob", 10).strung("{0} is {1}th");
}
🦊 对命名字段有效
#[derive(Strung)]
struct Struct {
name: &'static str,
pos: u32,
}
fn main(){
let s: String = Struct{name:"Bob", pos:10}.strung("{name} is {pos}th.");
// fields can also be addressed by their index
let z: String = Struct{name:"Bob", pos:10}.strung("{0} is {1}th.");
}
忽略
🐳 使用 #[igno]
,#[ignore]
,#[strung(igno)]
或 #[strung(ignore)]
使字段不可用
🦞 如果字段类型没有实现 Display,则必须忽略!
struct NoDisplay;
#[derive(Strung)]
struct Struct (&'static str, u32, #[igno] NoDisplay);
fn main(){
let s: String = Struct("Bob", 10, NoDisplay)
.strung("{0} is {1}th, he won {2}!");
}
级联
🐳 使用 #[cscd]
、#[cascade]
、#[strung(cscd)]
或 #[strung(cascade)]
来实现级联(递归)。
🐑 默认情况下,忽略级联字段
🐔 使用 #[notice]
、#[ntce]
或在 #[strung(..)]
中使用它们以使其可用,
#[derive(Strung)]
struct Struct &'static str, u32);
#[derive(Strung)]
struct Cascade (u32, #[cscd] Struct);
fn main(){
let s: String = Cascade(11,Struct("Bob", 10))
.strung("{1.0} is {1.1}th for the {0}th time!");
// => Bob is 10th for the 11th time!
}
前缀和后缀预制件
🐈 提供了 5 种不同的预制件
#[derive(Strung)]
struct Struct (&'static str, u32);
fn main(){
let t = Struct("Bob", 10);
let s = t.strung_curly("{0} is {1}th.");
let s = t.strung_angle("<0> is <1>th.");
let s = t.strung_dollry("${0} is ${1}th.");
let s = t.strung_dollar("$0 is $1th.");
let s = t.strung_hashtag("#0 is #1th.");
}
自定义前缀和后缀
🦊 您也可以以不同的方式自定义前/后缀
🦅 全局 - 使用静态变量和 .strung_static(..)
#[derive(Strung)]
struct Struct (&'static str, u32);
fn main(){
strung::set_static("<",">");
let s: String = Struct("Bob", 10).strung_static("<0> is <1>th.");
}
🐎 每个结构体 - 这将覆盖默认的 .strung(..)
前后缀
#[derive(Strung)]
#[strung("<",">")]
struct Struct (&'static str, u32);
fn main(){
let s: String = Struct("Bob", 10).strung("<0> is <1>th.");
}
🐍 每次调用 - 使用参数 .strung_dynamic(pre,post,..)
#[derive(Strung)]
struct Struct (&'static str, u32);
fn main(){
let s: String = Struct("Bob", 10).strung_dynamic("<",">","<0> is <1>th.");
}
🦎 每次调用 - 使用泛型常量字符 .strung_generic::<pre,post>(..)
#[derive(Strung)]
struct Struct (&'static str, u32);
fn main(){
let s: String = Struct("Bob", 10).strung_generic::<'<','>'>("<0> is <1>th.");
}
性能比较
🐕 动态/泛型/全局具有相同的运行时速度
🐇 默认/预制件/每个结构体更快!
🐁 使用 ~650 个字符和 6 个字段占位符的字符串
更多信息
🦕 文档
🦎 变更日志
🐱 GitHub
👾 Discord 服务器
许可
许可方式为 Apache License, Version 2.0 或 MIT 许可,由您选择。除非您明确表示,否则您提交给此存储库的任何贡献(根据 Apache-2.0 许可定义),均应以上述双许可方式提供,不附加任何额外条款或条件。
依赖项
~255–700KB
~17K SLoC