Здравствуйте!
Вопрос с serde напрямую, наверное, не связан, просто меня ставит в тупик сообщение комплиятора.
Вот код, практически один в один как в примере
impl Serialize for Term {
fn serialize<S: Serializer>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error> {
let mut s = serializer.serialize_struct("Term", 1)?;
s.serialize_field(&self.name, &self.value.serialize(serializer))?;
s.end()
}
}
Ошибка:
error[E0277]: the trait bound `<S as requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serializer>::Ok: requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serialize` is not satisfied
--> src/requester/mod.rs:42:11
|
42 | s.serialize_field(&self.name, &self.value.serialize(serializer))?;
| ^^^^^^^^^^^^^^^ the trait `requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serialize` is not implemented for `<S as requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serializer>::Ok`
|
= help: consider adding a `where <S as requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serializer>::Ok: requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serialize` bound
= note: required because of the requirements on the impl of `requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serialize` for `std::result::Result<<S as requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serializer>::Ok, <S as requester::_IMPL_SERIALIZE_FOR_Query::_serde::Serializer>::Error>`
Но как это может быть??!! Почему нет реализации Serialize для Ok? Ведь возвращаемый методом serialize_struct тип - это Result<Self::SerializeStruct, Self::Error>, т.е. s должен быть типом SerializeStruct, но никак ни Serializer::Ok