Handle comment parsing errors
This commit is contained in:
parent
541c741bde
commit
eb735a42fe
17
src/post.rs
17
src/post.rs
@ -115,7 +115,10 @@ async fn parse_post(json: &serde_json::Value) -> Post {
|
|||||||
#[async_recursion]
|
#[async_recursion]
|
||||||
async fn parse_comments(json: &serde_json::Value) -> Vec<Comment> {
|
async fn parse_comments(json: &serde_json::Value) -> Vec<Comment> {
|
||||||
// Separate the comment JSON into a Vector of comments
|
// Separate the comment JSON into a Vector of comments
|
||||||
let comment_data = json["data"]["children"].as_array().unwrap();
|
let comment_data = match json["data"]["children"].as_array() {
|
||||||
|
Some(f) => f.to_owned(),
|
||||||
|
None => { let v = Vec::new(); v }
|
||||||
|
};
|
||||||
|
|
||||||
let mut comments: Vec<Comment> = Vec::new();
|
let mut comments: Vec<Comment> = Vec::new();
|
||||||
|
|
||||||
@ -127,7 +130,7 @@ async fn parse_comments(json: &serde_json::Value) -> Vec<Comment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let score = comment["data"]["score"].as_i64().unwrap_or(0);
|
let score = comment["data"]["score"].as_i64().unwrap_or(0);
|
||||||
let body = rewrite_url(&val(comment, "body_html"));
|
let body = rewrite_url(&val(&comment, "body_html"));
|
||||||
|
|
||||||
let replies: Vec<Comment> = if comment["data"]["replies"].is_object() {
|
let replies: Vec<Comment> = if comment["data"]["replies"].is_object() {
|
||||||
parse_comments(&comment["data"]["replies"]).await
|
parse_comments(&comment["data"]["replies"]).await
|
||||||
@ -136,16 +139,16 @@ async fn parse_comments(json: &serde_json::Value) -> Vec<Comment> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
comments.push(Comment {
|
comments.push(Comment {
|
||||||
id: val(comment, "id"),
|
id: val(&comment, "id"),
|
||||||
body,
|
body,
|
||||||
author: val(comment, "author"),
|
author: val(&comment, "author"),
|
||||||
score: format_num(score),
|
score: format_num(score),
|
||||||
time: OffsetDateTime::from_unix_timestamp(unix_time).format("%b %d %Y %H:%M UTC"),
|
time: OffsetDateTime::from_unix_timestamp(unix_time).format("%b %d %Y %H:%M UTC"),
|
||||||
replies,
|
replies,
|
||||||
flair: Flair(
|
flair: Flair(
|
||||||
val(comment, "author_flair_text"),
|
val(&comment, "author_flair_text"),
|
||||||
val(comment, "author_flair_background_color"),
|
val(&comment, "author_flair_background_color"),
|
||||||
val(comment, "author_flair_text_color"),
|
val(&comment, "author_flair_text_color"),
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ pub async fn media(data: &serde_json::Value) -> (String, String) {
|
|||||||
post_type = "image";
|
post_type = "image";
|
||||||
match preview["variants"]["mp4"].as_object() {
|
match preview["variants"]["mp4"].as_object() {
|
||||||
Some(gif) => format_url(gif["source"]["url"].as_str().unwrap_or_default()),
|
Some(gif) => format_url(gif["source"]["url"].as_str().unwrap_or_default()),
|
||||||
None => format_url(preview["source"]["url"].as_str().unwrap_or_default())
|
None => format_url(preview["source"]["url"].as_str().unwrap_or_default()),
|
||||||
}
|
}
|
||||||
} else if data["is_self"].as_bool().unwrap_or_default() {
|
} else if data["is_self"].as_bool().unwrap_or_default() {
|
||||||
post_type = "self";
|
post_type = "self";
|
||||||
@ -182,7 +182,7 @@ pub async fn media(data: &serde_json::Value) -> (String, String) {
|
|||||||
data["url"].as_str().unwrap_or_default().to_string()
|
data["url"].as_str().unwrap_or_default().to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
(post_type.to_string(), url.to_string())
|
(post_type.to_string(), url)
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user