Я хотел бы преобразовать Option<&String>
в Option<&str>
с as_deref()
, но компилятор, похоже, неправильно понял мои намерения. Если я заменю его на .map(|e| e.as_str())
, это сработает.
use std::collections::HashMap;
trait SipField {
fn from(&self) -> Option<&str>;
}
impl SipField for HashMap<String, Vec<String>> {
fn from(&self) -> Option<&str> {
self.get("from")
.or_else(|| self.get("f"))
.and_then(|i| i.first())
.as_deref()
}
}
error[E0308]: mismatched types
--> src/lib.rs:9:9
|
9 | / self.get("from")
10 | | .or_else(|| self.get("f"))
11 | | .and_then(|i| i.first())
12 | | .as_deref()
| |_______________________^ expected `str`, found struct `std::string::String`
|
= note: expected enum `std::option::Option<&str>`
found enum `std::option::Option<&std::string::String>`