Minoru @power_mew: там десериализация, т.е. функция готова возвращать что угодно. Вывод типов решил, что должно быть Option<Post>, функция сказала «ок». Но тесты не прошли, потому что на самом деле там должно было быть просто Post
Minoru @power_mew: потому что функция возвращает Result<Option<Post>>, а внутри функции я написал Ok(deserialize(input)). Вывод типов решил, что deserialize должно вернуть Option<Post>. Поменял на Ok(Some(deserialize(input))) — и всё стало хорошо
Minoru @power_mew: потому что функция возвращает Result<Option<Post>>, а внутри функции я написал Ok(deserialize(input)). Вывод типов решил, что deserialize должно вернуть Option<Post>. Поменял на Ok(Some(deserialize(input))) — и всё стало хорошо
звучит как бред. Если функция уже что-то возвращает (объявлена так штоль), а ты внутри неё возвращаешь что-то не то, то это херня
Minoru @power_mew: да, так объявлена. struct Post; fn foo(input: &[u8]) -> Result<Option<Post>> { Ok(deserialize(input)?) } пытается распарсить input как Option<Post>
Minoru @power_mew: и да, в таком вот сокращённом формате проблема совершенно очевидна, потому что в неправильном варианте сразу возникает вопрос «а зачем там нужен «?»