【发布时间】:2020-09-30 21:45:50
【问题描述】:
在下面的代码中显式使用String::from 有效,但我怎样才能让它自动使用From<OsStringWrap<'a>> 特征而不显式使用String::from?
use serde::Serialize; // 1.0.115
struct OsStringWrap<'a>(&'a std::ffi::OsString);
impl<'a> From<OsStringWrap<'a>> for String {
fn from(s: OsStringWrap) -> String {
s.0.to_string_lossy().to_string()
}
}
pub fn insert<T: Serialize + ?Sized, S: Into<String>>(_key: S, _value: &T) {}
fn main() {
for (key, value) in std::env::vars_os() {
// HOW-TO: auto use From<OsStringWrap<'a>> trait
// without explicit `String::from` like below?
/*
insert(OsStringWrap(&key), &OsStringWrap(&value))
*/
// below using `String::from` to make it explicitly
// but want to find a way to make it shorter
insert(OsStringWrap(&key), &String::from(OsStringWrap(&value)))
}
}
Playground,insert 方法是来自tera 的真实案例
【问题讨论】:
-
为什么这段代码使用
Serialize?这对这个问题似乎并不重要。 -
@Shepmaster
insert方法是来自tera 的真实案例 -
所以你有一个请求
T: Serialize...的函数,而不是为OsStringWrap实现Serialize,而是首先将它转换为String...并且你想要String-转换是自动的?似乎是迂回的。为什么不直接实现Serialize?
标签: rust