diff options
author | Vika <vika@fireburn.ru> | 2022-05-23 17:45:38 +0300 |
---|---|---|
committer | Vika <vika@fireburn.ru> | 2022-05-23 18:22:07 +0300 |
commit | 067d6c4c08120bb9b93190911bd00adf9159bba1 (patch) | |
tree | ada0b00b201b10faeae524e176c1d7c5f7cc2922 | |
parent | 32317404bf47ac9db34f954ab74a9e400dc32037 (diff) | |
download | kittybox-067d6c4c08120bb9b93190911bd00adf9159bba1.tar.zst |
templates: simplify logic
There were lots of unneccesary Option::unwrap() invocations that could be replaced with `if let` statements. This makes the code cleaner and less likely to panic in case a corrupted, incomplete or manually injected MF2-JSON document needs to be rendered.
-rw-r--r-- | templates/src/templates.rs | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/templates/src/templates.rs b/templates/src/templates.rs index 44e6042..f2040fc 100644 --- a/templates/src/templates.rs +++ b/templates/src/templates.rs @@ -79,29 +79,28 @@ markup::define! { Entry<'a>(post: &'a serde_json::Value) { article."h-entry" { header.metadata { - @if post["properties"]["name"][0].is_string() { - h1."p-name" { - @post["properties"]["name"][0].as_str().unwrap() - } - } else { - @if post["properties"]["author"][0].is_object() { - section."mini-h-card" { - a.larger[href=post["properties"]["author"][0]["properties"]["uid"][0].as_str().unwrap()] { - @if post["properties"]["author"][0]["properties"]["photo"][0].is_string() { - img[src=post["properties"]["author"][0]["properties"]["photo"][0].as_str().unwrap()] {} - } - @post["properties"]["author"][0]["properties"]["name"][0].as_str().unwrap() + @if let Some(name) = post["properties"]["name"][0].as_str() { + h1."p-name" { @name } + } + @if let Some(author) = post["properties"]["author"][0].as_object() { + section."mini-h-card" { + a.larger."u-author"[href=author["properties"]["uid"][0].as_str().unwrap()] { + @if let Some(photo) = author["properties"]["photo"][0].as_str() { + img[src=photo, loading="lazy"]; } + @author["properties"]["name"][0].as_str().unwrap() } } } div { span { a."u-url"."u-uid"[href=post["properties"]["uid"][0].as_str().unwrap()] { - time."dt-published"[datetime=post["properties"]["published"][0].as_str().unwrap()] { - @chrono::DateTime::parse_from_rfc3339(post["properties"]["published"][0].as_str().unwrap()) - .map(|dt| dt.format("%a %b %e %T %Y").to_string()) - .unwrap_or("ERROR: Couldn't parse the datetime".to_string()) + @if let Some(published) = post["properties"]["published"][0].as_str() { + time."dt-published"[datetime=published] { + @chrono::DateTime::parse_from_rfc3339(published) + .map(|dt| dt.format("%a %b %e %T %Y").to_string()) + .unwrap_or("sometime in the past".to_string()) + } } } } @@ -239,17 +238,23 @@ markup::define! { } } PhotoGallery<'a>(photos: Option<&'a Vec<serde_json::Value>>) { - @if photos.is_some() { - @for photo in photos.unwrap() { - @if photo.is_string() { - img."u-photo"[src=photo.as_str().unwrap(), loading="lazy"]; - } else if photo.is_array() { - @if photo["thumbnail"].is_string() { + @if let Some(photos) = photos { + @for photo in photos.iter() { + @if let Some(photo) = photo.as_str() { + img."u-photo"[src=photo, loading="lazy"]; + } else if photo.is_object() { + @if let Some(thumbnail) = photo["thumbnail"].as_str() { a."u-photo"[href=photo["value"].as_str().unwrap()] { - img[src=photo["thumbnail"].as_str().unwrap(), loading="lazy", alt=photo["alt"].as_str().unwrap_or("")]; + img[src=thumbnail, + loading="lazy", + alt=photo["alt"].as_str().unwrap_or("") + ]; } } else { - img."u-photo"[src=photo["value"].as_str().unwrap(), loading="lazy", alt=photo["alt"].as_str().unwrap_or("")]; + img."u-photo"[src=photo["value"].as_str().unwrap(), + loading="lazy", + alt=photo["alt"].as_str().unwrap_or("") + ]; } } } |