- Here is my code
use super::*;
use std::fs::File;
use std::io::prelude::*;
use std::fmt;
use serde_json::Value;
use serde::de::{Deserialize, Deserializer, Visitor};
use serde::de::SeqAccess;
use serde::de::MapAccess;
#[derive(Debug)]
pub struct TokenLoc {
start: i32,
end: i32,
}
#[derive(Debug)]
pub struct Article {
charoffset: Vec<Vec<TokenLoc>>,
text: Vec<Vec<String>>
}
impl <'de> Deserialize<'de> for Article {
fn deserialize<D>(deserializer: D) -> Result<Article, D::Error> where
D: Deserializer<'de> {
struct ArticleVisitor;
impl<'de> Visitor<'de> for ArticleVisitor {
type Value = Article;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("struct ARticle")
}
fn visit_map<A>(self, mut access: A) -> Result<Article, A::Error>
where
A: MapAccess<'de>,
{
while let Some(key) = access.next_key()? {
println!("{:?}", key);
}
panic!();
}
}
deserializer.deserialize_map(ArticleVisitor {})
}
}
- Here is the error rustc is telling me:
|
43 | while let Some(key) = access.next_key()? {
| ^^^ cannot infer type
-
What type should I be annotating it with? (I'm expecting it to be a String).
-
How do I even annotate a "while let Some(key) ..." line?
-
(Ideal answer would be if you could just rewrite that one line for me.) Thanks!