2 个版本
0.1.1 | 2023 年 1 月 21 日 |
---|---|
0.1.0 | 2023 年 1 月 21 日 |
#21 in #结果
每月 72 次下载
用于 impl-converter-helper
20KB
144 行
Warned<T, W>
... 带有警告的值
Warned<T, W>
类型表示带有警告的值,而 Result<T, E>
类型表示值或错误。
基本
// new
let pi = warned::Warned::new(3.14, vec!["bad precision"]);
assert_eq!(pi.value, 3.14);
assert_eq!(pi.warnings, vec!["bad precision"]);
// dereference
assert_eq!(*pi, 3.14);
// unwrap
let mut warnings = vec!["several", "existing", "warnings"];
assert_eq!(pi.unwrap(&mut warnings), 3.14);
assert_eq!(warnings, vec!["several", "existing", "warnings", "bad precision"]);
// into
let a: warned::Warned<i32, String> = 123.into();
assert_eq!(a.value, 123);
assert!(a.warnings.is_empty());
Warned<T, W>
和 Result<T, W>
之间的转换
Warned::into_result
仅当self
没有警告时返回Ok
。否则返回Err
。From<Warned<T, W>>
特性为Result<T, Vec<W>>
实现Warned::into_result
。Warned::from_result_or_else
如果src
是Ok
,则返回无警告的值。否则返回具有单个警告的f()
值。Warned::from_result_or
如果src
是Ok
,则返回无警告的值。否则返回具有单个警告的给定default
值。Warned::from_result_or_default
如果src
是Ok
,则返回无警告的值。否则返回具有单个警告的T::default()
值。Warned::from_result
在src为Ok
时返回一个没有警告的Some
值。否则,返回包含单个警告的None
。
FromIterator
实现
FromIterator<Warned<T, W>>
可以将Warned<T, W>
的序列收集为Warned<Vec<T>, W>
。
let src = vec![
warned::Warned::new(111, vec![]),
warned::Warned::new(222, vec!["oops"]),
warned::Warned::new(333, vec!["foo", "bar"])
];
let dst = src.into_iter().collect::<warned::Warned<Vec<_>, _>>();
assert_eq!(dst.value, vec![111, 222, 333]);
assert_eq!(dst.warnings, vec!["oops", "foo", "bar"]);
FromIterator<结果<T, E>>
可以将Result<T, E>
的序列收集为Warned<Vec<T>, E>
。
let src = vec![Ok(111), Err("oops"), Err("oops2"), Ok(222)];
let dst = src.into_iter().collect::<warned::Warned<Vec<_>, _>>();
assert_eq!(dst.value, vec![111, 222]);
assert_eq!(dst.warnings, vec!["oops", "oops2"]);
ForceFrom
特质,ForceInto
特质
这两个特质对类似于TryFrom
/TryInto
特质对。当您实现ForceFrom
转换时,ForceInto
实现会自动由下面的泛型实现定义。以下泛型实现也得到支持。
pub trait ForceFrom<T>: Sized {
type Warning;
fn force_from(src: T) -> Warned<Self, Self::Warning>;
}
pub trait ForceInto<T> {
type Warning;
fn force_into(self) -> Warned<T, Self::Warning>;
}
当您实现ForceFrom
转换时,ForceInto
实现会自动由下面的泛型实现定义
impl<T, U: ForceFrom<T>> ForceInto<U> for T {
type Warning = U::Warning;
fn force_into(self) -> Warned<U, Self::Warning> {
U::force_from(self)
}
}
以下泛型实现也得到支持。
impl<T: Into<U>, U> ForceFrom<T> for U {
type Warning = std::convert::Infallible;
fn force_from(src: T) -> Warned<Self, Self::Warning> {
src.into().into()
}
}
依赖
~175KB