From d2455aa1c1bfc599a07966a7d717c1380d41bbc0 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Thu, 14 Jan 2021 22:36:34 -0500 Subject: Cache better (#296) * Many improvements around bandwidth use - Use ETags for RSS/Atom feeds - Use cache-control headers - Update to rust nightly (for rust-analyzer and faster builds) - Limit feeds to the last 20 posts: https://twitter.com/theprincessxena/status/1349891678857998339 - Use if-none-match to limit bandwidth further Also does this: - bump go_vanity to 0.3.0 and lets users customize the branch name - fix formatting on jsonfeed - remove last vestige of kubernetes/docker support Signed-off-by: Christine Dodrill * expire cache quicker for dynamic pages Signed-off-by: Christine Dodrill * add rss ttl Signed-off-by: Christine Dodrill * add blogpost Signed-off-by: Christine Dodrill --- lib/jsonfeed/src/lib.rs | 66 ++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 45 deletions(-) (limited to 'lib/jsonfeed/src/lib.rs') diff --git a/lib/jsonfeed/src/lib.rs b/lib/jsonfeed/src/lib.rs index bc1d94e..812083e 100644 --- a/lib/jsonfeed/src/lib.rs +++ b/lib/jsonfeed/src/lib.rs @@ -2,7 +2,7 @@ //! instead of XML //! //! This crate can serialize and deserialize between JSON Feed strings -//! and Rust data structures. It also allows for programmatically building +//! and Rust data structures. It also allows for programmatically building //! a JSON Feed //! //! Example: @@ -40,18 +40,20 @@ //! ``` extern crate serde; -#[macro_use] extern crate error_chain; -#[macro_use] extern crate serde_derive; +#[macro_use] +extern crate error_chain; +#[macro_use] +extern crate serde_derive; extern crate serde_json; +mod builder; mod errors; -mod item; mod feed; -mod builder; +mod item; pub use errors::*; +pub use feed::{Attachment, Author, Feed}; pub use item::*; -pub use feed::{Feed, Author, Attachment}; use std::io::Write; @@ -116,14 +118,16 @@ pub fn to_vec_pretty(value: &Feed) -> Result> { /// Serialize a Feed to JSON and output to an IO stream pub fn to_writer(writer: W, value: &Feed) -> Result<()> - where W: Write +where + W: Write, { Ok(serde_json::to_writer(writer, value)?) } /// Serialize a Feed to pretty-printed JSON and output to an IO stream pub fn to_writer_pretty(writer: W, value: &Feed) -> Result<()> - where W: Write +where + W: Write, { Ok(serde_json::to_writer_pretty(writer, value)?) } @@ -137,10 +141,7 @@ mod tests { fn from_str() { let feed = r#"{"version": "https://jsonfeed.org/version/1","title":"","items":[]}"#; let expected = Feed::default(); - assert_eq!( - super::from_str(&feed).unwrap(), - expected - ); + assert_eq!(super::from_str(&feed).unwrap(), expected); } #[test] fn from_reader() { @@ -148,39 +149,27 @@ mod tests { let feed = feed.as_bytes(); let feed = Cursor::new(feed); let expected = Feed::default(); - assert_eq!( - super::from_reader(feed).unwrap(), - expected - ); + assert_eq!(super::from_reader(feed).unwrap(), expected); } #[test] fn from_slice() { let feed = r#"{"version": "https://jsonfeed.org/version/1","title":"","items":[]}"#; let feed = feed.as_bytes(); let expected = Feed::default(); - assert_eq!( - super::from_slice(&feed).unwrap(), - expected - ); + assert_eq!(super::from_slice(&feed).unwrap(), expected); } #[test] fn from_value() { let feed = r#"{"version": "https://jsonfeed.org/version/1","title":"","items":[]}"#; let feed: serde_json::Value = serde_json::from_str(&feed).unwrap(); let expected = Feed::default(); - assert_eq!( - super::from_value(feed).unwrap(), - expected - ); + assert_eq!(super::from_value(feed).unwrap(), expected); } #[test] fn to_string() { let feed = Feed::default(); let expected = r#"{"version":"https://jsonfeed.org/version/1","title":"","items":[]}"#; - assert_eq!( - super::to_string(&feed).unwrap(), - expected - ); + assert_eq!(super::to_string(&feed).unwrap(), expected); } #[test] fn to_string_pretty() { @@ -190,28 +179,19 @@ mod tests { "title": "", "items": [] }"#; - assert_eq!( - super::to_string_pretty(&feed).unwrap(), - expected - ); + assert_eq!(super::to_string_pretty(&feed).unwrap(), expected); } #[test] fn to_value() { let feed = r#"{"version":"https://jsonfeed.org/version/1","title":"","items":[]}"#; let expected: serde_json::Value = serde_json::from_str(&feed).unwrap(); - assert_eq!( - super::to_value(Feed::default()).unwrap(), - expected - ); + assert_eq!(super::to_value(Feed::default()).unwrap(), expected); } #[test] fn to_vec() { let feed = r#"{"version":"https://jsonfeed.org/version/1","title":"","items":[]}"#; let expected = feed.as_bytes(); - assert_eq!( - super::to_vec(&Feed::default()).unwrap(), - expected - ); + assert_eq!(super::to_vec(&Feed::default()).unwrap(), expected); } #[test] fn to_vec_pretty() { @@ -221,10 +201,7 @@ mod tests { "items": [] }"#; let expected = feed.as_bytes(); - assert_eq!( - super::to_vec_pretty(&Feed::default()).unwrap(), - expected - ); + assert_eq!(super::to_vec_pretty(&Feed::default()).unwrap(), expected); } #[test] fn to_writer() { @@ -249,4 +226,3 @@ mod tests { assert_eq!(result, feed); } } - -- cgit v1.2.3