Rust 键入必须符合某些语法的字符串

Rust 键入必须符合某些语法的字符串,rust,serde,Rust,Serde,我想创建一个“constrated”类型,其行为类似于String,但在构造时会验证它是否符合某些语法。例如,我们可以创建一个标识符类型,该类型的行为类似于字符串,但强制所有字符匹配[a-zA-Z] 特别是,我希望实现通常的特性(Display、Ord,等等),并且我希望serde::Serialize和serde::Deserialize的行为与普通的字符串类似,只是我们在反序列化时进行验证 有没有一种惯用的方法可以做到这一点,或者我必须手动实现所有的trait?惯用的方法是创建一个aroun

我想创建一个“constrated”类型,其行为类似于
String
,但在构造时会验证它是否符合某些语法。例如,我们可以创建一个
标识符
类型,该类型的行为类似于
字符串
,但强制所有字符匹配
[a-zA-Z]

特别是,我希望实现通常的特性(
Display
Ord
,等等),并且我希望
serde::Serialize
serde::Deserialize
的行为与普通的
字符串
类似,只是我们在反序列化时进行验证


有没有一种惯用的方法可以做到这一点,或者我必须手动实现所有的trait?

惯用的方法是创建一个around
字符串,并派生可以派生的trait

使用serde;
使用serde_json;
#[推导(
Eq,PartialEq,Ord,PartialOrd,
调试,默认,
serde::序列化,serde::反序列化,
)]
#[serde(透明)]//将其序列化为字符串
发布结构标识符(
#[serde(反序列化_with=“Identifier::deserialize”)]
一串
);
impl标识符{
pub fn new(s:String)->Result(d:d)->Result
哪里

D:serde::Deserializer您想在运行时或编译时检查它吗?但是在构造时-因此类型在构造后不再符合约束是可以接受的?行为类似于
String
-以何种确切方式?您是否能够将其转换为
chars
的迭代器?关于
pus呢h
一个字符?有很多
字符串
行为可供选择。