@@ -450,13 +450,13 @@ impl Post {
450450 rel_time,
451451 created,
452452 created_ts,
453- num_duplicates : post [ " data" ] [ "num_duplicates" ] . as_u64 ( ) . unwrap_or ( 0 ) ,
453+ num_duplicates : data[ "num_duplicates" ] . as_u64 ( ) . unwrap_or ( 0 ) ,
454454 comments : format_num ( data[ "num_comments" ] . as_i64 ( ) . unwrap_or_default ( ) ) ,
455455 gallery,
456456 awards,
457- nsfw : post [ " data" ] [ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
457+ nsfw : data[ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
458458 ws_url : val ( post, "websocket_url" ) ,
459- out_url : post [ " data" ] [ "url_overridden_by_dest" ] . as_str ( ) . map ( |a| a. to_string ( ) ) ,
459+ out_url : data[ "url_overridden_by_dest" ] . as_str ( ) . map ( |a| a. to_string ( ) ) ,
460460 } ) ;
461461 }
462462 Ok ( ( posts, res[ "data" ] [ "after" ] . as_str ( ) . unwrap_or_default ( ) . to_string ( ) ) )
@@ -611,7 +611,7 @@ pub struct Params {
611611 pub before : Option < String > ,
612612}
613613
614- #[ derive( Default , Serialize , Deserialize , Debug , PartialEq , Eq ) ]
614+ #[ derive( Default , Clone , Serialize , Deserialize , Debug , PartialEq , Eq ) ]
615615#[ revisioned( revision = 1 ) ]
616616pub struct Preferences {
617617 #[ revision( start = 1 ) ]
@@ -752,11 +752,6 @@ pub fn deflate_decompress(i: Vec<u8>) -> Result<Vec<u8>, String> {
752752 Ok ( out)
753753}
754754
755- /// Gets a `HashSet` of filters from the cookie in the given `Request`.
756- pub fn get_filters ( req : & Request < Body > ) -> HashSet < String > {
757- setting ( req, "filters" ) . split ( '+' ) . map ( String :: from) . filter ( |s| !s. is_empty ( ) ) . collect :: < HashSet < String > > ( )
758- }
759-
760755/// Filters a `Vec<Post>` by the given `HashSet` of filters (each filter being
761756/// a subreddit name or a user name). If a `Post`'s subreddit or author is
762757/// found in the filters, it is removed.
@@ -765,7 +760,7 @@ pub fn get_filters(req: &Request<Body>) -> HashSet<String> {
765760/// second return value is `true` if all posts were filtered.
766761pub fn filter_posts ( posts : & mut Vec < Post > , filters : & HashSet < String > ) -> ( u64 , bool ) {
767762 // This is the length of the Vec<Post> prior to applying the filter.
768- let lb: u64 = posts. len ( ) . try_into ( ) . unwrap_or ( 0 ) ;
763+ let lb = posts. len ( ) as u64 ;
769764
770765 if posts. is_empty ( ) {
771766 ( 0 , false )
@@ -774,30 +769,32 @@ pub fn filter_posts(posts: &mut Vec<Post>, filters: &HashSet<String>) -> (u64, b
774769
775770 // Get the length of the Vec<Post> after applying the filter.
776771 // If lb > la, then at least one post was removed.
777- let la: u64 = posts. len ( ) . try_into ( ) . unwrap_or ( 0 ) ;
772+ let la = posts. len ( ) as u64 ;
778773
779774 ( lb - la, posts. is_empty ( ) )
780775 }
781776}
782777
783778/// Creates a [`Post`] from a provided JSON.
784779pub async fn parse_post ( post : & Value ) -> Post {
780+ let data = & post[ "data" ] ;
781+
785782 // Grab UTC time as unix timestamp
786- let ( rel_time, created) = time ( post[ "data" ] [ "created_utc" ] . as_f64 ( ) . unwrap_or_default ( ) ) ;
783+ let created_utc = data[ "created_utc" ] . as_f64 ( ) . unwrap_or_default ( ) ;
784+ let ( rel_time, created) = time ( created_utc) ;
785+ let created_ts = created_utc. round ( ) as u64 ;
787786 // Parse post score and upvote ratio
788- let score = post [ " data" ] [ "score" ] . as_i64 ( ) . unwrap_or_default ( ) ;
789- let ratio: f64 = post [ " data" ] [ "upvote_ratio" ] . as_f64 ( ) . unwrap_or ( 1.0 ) * 100.0 ;
787+ let score = data[ "score" ] . as_i64 ( ) . unwrap_or_default ( ) ;
788+ let ratio: f64 = data[ "upvote_ratio" ] . as_f64 ( ) . unwrap_or ( 1.0 ) * 100.0 ;
790789
791790 // Determine the type of media along with the media URL
792- let ( post_type, media, gallery) = Media :: parse ( & post[ "data" ] ) . await ;
793-
794- let created_ts = post[ "data" ] [ "created_utc" ] . as_f64 ( ) . unwrap_or_default ( ) . round ( ) as u64 ;
791+ let ( post_type, media, gallery) = Media :: parse ( data) . await ;
795792
796- let awards: Awards = Awards :: parse ( & post [ " data" ] [ "all_awardings" ] ) ;
793+ let awards: Awards = Awards :: parse ( & data[ "all_awardings" ] ) ;
797794
798795 let permalink = val ( post, "permalink" ) ;
799796
800- let poll = Poll :: parse ( & post [ " data" ] [ "poll_data" ] ) ;
797+ let poll = Poll :: parse ( & data[ "poll_data" ] ) ;
801798
802799 let body = if val ( post, "removed_by_category" ) == "moderator" {
803800 format ! (
@@ -826,9 +823,9 @@ pub async fn parse_post(post: &Value) -> Post {
826823 name : val ( post, "author" ) ,
827824 flair : Flair {
828825 flair_parts : FlairPart :: parse (
829- post [ " data" ] [ "author_flair_type" ] . as_str ( ) . unwrap_or_default ( ) ,
830- post [ " data" ] [ "author_flair_richtext" ] . as_array ( ) ,
831- post [ " data" ] [ "author_flair_text" ] . as_str ( ) ,
826+ data[ "author_flair_type" ] . as_str ( ) . unwrap_or_default ( ) ,
827+ data[ "author_flair_richtext" ] . as_array ( ) ,
828+ data[ "author_flair_text" ] . as_str ( ) ,
832829 ) ,
833830 text : val ( post, "link_flair_text" ) ,
834831 background_color : val ( post, "author_flair_background_color" ) ,
@@ -846,16 +843,16 @@ pub async fn parse_post(post: &Value) -> Post {
846843 thumbnail : Media {
847844 url : format_url ( val ( post, "thumbnail" ) . as_str ( ) ) ,
848845 alt_url : String :: new ( ) ,
849- width : post [ " data" ] [ "thumbnail_width" ] . as_i64 ( ) . unwrap_or_default ( ) ,
850- height : post [ " data" ] [ "thumbnail_height" ] . as_i64 ( ) . unwrap_or_default ( ) ,
846+ width : data[ "thumbnail_width" ] . as_i64 ( ) . unwrap_or_default ( ) ,
847+ height : data[ "thumbnail_height" ] . as_i64 ( ) . unwrap_or_default ( ) ,
851848 poster : String :: new ( ) ,
852849 download_name : String :: new ( ) ,
853850 } ,
854851 flair : Flair {
855852 flair_parts : FlairPart :: parse (
856- post [ " data" ] [ "link_flair_type" ] . as_str ( ) . unwrap_or_default ( ) ,
857- post [ " data" ] [ "link_flair_richtext" ] . as_array ( ) ,
858- post [ " data" ] [ "link_flair_text" ] . as_str ( ) ,
853+ data[ "link_flair_type" ] . as_str ( ) . unwrap_or_default ( ) ,
854+ data[ "link_flair_richtext" ] . as_array ( ) ,
855+ data[ "link_flair_text" ] . as_str ( ) ,
859856 ) ,
860857 text : val ( post, "link_flair_text" ) ,
861858 background_color : val ( post, "link_flair_background_color" ) ,
@@ -866,21 +863,21 @@ pub async fn parse_post(post: &Value) -> Post {
866863 } ,
867864 } ,
868865 flags : Flags {
869- spoiler : post [ " data" ] [ "spoiler" ] . as_bool ( ) . unwrap_or_default ( ) ,
870- nsfw : post [ " data" ] [ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
871- stickied : post [ " data" ] [ "stickied" ] . as_bool ( ) . unwrap_or_default ( ) || post [ " data" ] [ "pinned" ] . as_bool ( ) . unwrap_or ( false ) ,
866+ spoiler : data[ "spoiler" ] . as_bool ( ) . unwrap_or_default ( ) ,
867+ nsfw : data[ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
868+ stickied : data[ "stickied" ] . as_bool ( ) . unwrap_or_default ( ) || data[ "pinned" ] . as_bool ( ) . unwrap_or ( false ) ,
872869 } ,
873870 domain : val ( post, "domain" ) ,
874871 rel_time,
875872 created,
876873 created_ts,
877- num_duplicates : post [ " data" ] [ "num_duplicates" ] . as_u64 ( ) . unwrap_or ( 0 ) ,
878- comments : format_num ( post [ " data" ] [ "num_comments" ] . as_i64 ( ) . unwrap_or_default ( ) ) ,
874+ num_duplicates : data[ "num_duplicates" ] . as_u64 ( ) . unwrap_or ( 0 ) ,
875+ comments : format_num ( data[ "num_comments" ] . as_i64 ( ) . unwrap_or_default ( ) ) ,
879876 gallery,
880877 awards,
881- nsfw : post [ " data" ] [ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
878+ nsfw : data[ "over_18" ] . as_bool ( ) . unwrap_or_default ( ) ,
882879 ws_url : val ( post, "websocket_url" ) ,
883- out_url : post [ " data" ] [ "url_overridden_by_dest" ] . as_str ( ) . map ( |a| a. to_string ( ) ) ,
880+ out_url : data[ "url_overridden_by_dest" ] . as_str ( ) . map ( |a| a. to_string ( ) ) ,
884881 }
885882}
886883
0 commit comments