From 624206163a5510b21db48ea0f3746e5886ef4b9c Mon Sep 17 00:00:00 2001 From: mbeynon Date: Fri, 18 Feb 2022 14:22:33 -0500 Subject: [PATCH 1/3] Isolate chono use from rest of "builtins" features --- CHANGELOG.md | 4 ++++ Cargo.toml | 4 ++-- src/builtins/filters/common.rs | 28 ++++++++++++++-------------- src/builtins/functions.rs | 14 ++++++++------ src/tera.rs | 4 ++-- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93d719bb0..7ac46c490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## TBD (2022-02-18) + +- Move all `chrono` definition and use under `chrono` feature instead of bundling with `builtins`. This +allows optional use of `chrono` given it's not fully maintained. ## 1.15.0 (2021-11-03) diff --git a/Cargo.toml b/Cargo.toml index 0c461680f..90db08c87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,8 +42,8 @@ pretty_assertions = "1" tempfile = "3" [features] -default = ["builtins"] -builtins = ["slug", "percent-encoding", "humansize", "chrono", "chrono-tz", "rand"] +default = ["builtins", "chrono", "chrono-tz"] +builtins = ["slug", "percent-encoding", "humansize", "rand"] preserve_order = ["serde_json/preserve_order"] [badges] diff --git a/src/builtins/filters/common.rs b/src/builtins/filters/common.rs index a5c72447e..d5fc42e56 100644 --- a/src/builtins/filters/common.rs +++ b/src/builtins/filters/common.rs @@ -4,12 +4,12 @@ use std::iter::FromIterator; use crate::errors::{Error, Result}; use crate::utils::render_to_string; -#[cfg(feature = "builtins")] +#[cfg(feature = "chrono")] use chrono::{ format::{Item, StrftimeItems}, DateTime, FixedOffset, NaiveDate, NaiveDateTime, Utc, }; -#[cfg(feature = "builtins")] +#[cfg(feature = "chrono")] use chrono_tz::Tz; use serde_json::value::{to_value, Value}; use serde_json::{to_string, to_string_pretty}; @@ -65,7 +65,7 @@ pub fn json_encode(value: &Value, args: &HashMap) -> Result) -> Result { let format = match args.get("format") { Some(val) => try_get_value!("date", "format", String, val), @@ -151,7 +151,7 @@ pub fn as_str(value: &Value, _: &HashMap) -> Result { #[cfg(test)] mod tests { use super::*; - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] use chrono::{DateTime, Local}; use serde_json; use serde_json::value::to_value; @@ -232,7 +232,7 @@ mod tests { ); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_default() { let args = HashMap::new(); @@ -241,7 +241,7 @@ mod tests { assert_eq!(result.unwrap(), to_value("2016-12-26").unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_custom_format() { let mut args = HashMap::new(); @@ -253,7 +253,7 @@ mod tests { // https://zola.discourse.group/t/can-i-generate-a-random-number-within-a-range/238?u=keats // https://github.com/chronotope/chrono/issues/47 - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_errors_on_incorrect_format() { let mut args = HashMap::new(); @@ -262,7 +262,7 @@ mod tests { assert!(result.is_err()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_rfc3339() { let args = HashMap::new(); @@ -272,7 +272,7 @@ mod tests { assert_eq!(result.unwrap(), to_value(dt.format("%Y-%m-%d").to_string()).unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_rfc3339_preserves_timezone() { let mut args = HashMap::new(); @@ -282,7 +282,7 @@ mod tests { assert_eq!(result.unwrap(), to_value("1996-12-19 -0800").unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_yyyy_mm_dd() { let mut args = HashMap::new(); @@ -292,7 +292,7 @@ mod tests { assert_eq!(result.unwrap(), to_value("Sun, 05 Mar 2017 00:00:00 +0000").unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_from_naive_datetime() { let mut args = HashMap::new(); @@ -304,7 +304,7 @@ mod tests { } // https://github.com/getzola/zola/issues/1279 - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_format_doesnt_panic() { let mut args = HashMap::new(); @@ -313,7 +313,7 @@ mod tests { assert!(result.is_ok()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_with_timezone() { let mut args = HashMap::new(); @@ -323,7 +323,7 @@ mod tests { assert_eq!(result.unwrap(), to_value("2019-09-18").unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn date_with_invalid_timezone() { let mut args = HashMap::new(); diff --git a/src/builtins/functions.rs b/src/builtins/functions.rs index c3b9fefbf..183c7da91 100644 --- a/src/builtins/functions.rs +++ b/src/builtins/functions.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; -#[cfg(feature = "builtins")] -use chrono::prelude::*; +#[cfg(feature = "chrono")] +use chrono::{ + Utc, Local, +}; #[cfg(feature = "builtins")] use rand::Rng; use serde_json::value::{from_value, to_value, Value}; @@ -83,7 +85,7 @@ pub fn range(args: &HashMap) -> Result { Ok(to_value(res).unwrap()) } -#[cfg(feature = "builtins")] +#[cfg(feature = "chrono")] pub fn now(args: &HashMap) -> Result { let utc = match args.get("utc") { Some(val) => match from_value::(val.clone()) { @@ -240,7 +242,7 @@ mod tests { assert_eq!(res, to_value(vec![0, 2, 4, 6, 8]).unwrap()); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn now_default() { let args = HashMap::new(); @@ -250,7 +252,7 @@ mod tests { assert!(res.as_str().unwrap().contains("T")); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn now_datetime_utc() { let mut args = HashMap::new(); @@ -264,7 +266,7 @@ mod tests { assert!(val.contains("+00:00")); } - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] #[test] fn now_timestamp() { let mut args = HashMap::new(); diff --git a/src/tera.rs b/src/tera.rs index 44a69753f..86c103ac3 100644 --- a/src/tera.rs +++ b/src/tera.rs @@ -613,7 +613,7 @@ impl Tera { self.register_filter("length", common::length); self.register_filter("reverse", common::reverse); - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] self.register_filter("date", common::date); self.register_filter("json_encode", common::json_encode); self.register_filter("as_str", common::as_str); @@ -639,7 +639,7 @@ impl Tera { fn register_tera_functions(&mut self) { self.register_function("range", functions::range); - #[cfg(feature = "builtins")] + #[cfg(feature = "chrono")] self.register_function("now", functions::now); self.register_function("throw", functions::throw); #[cfg(feature = "builtins")] From 328b8c2a98d6998ebf60091a9db50cf548c738d7 Mon Sep 17 00:00:00 2001 From: mbeynon Date: Fri, 25 Feb 2022 11:35:47 -0500 Subject: [PATCH 2/3] Don't change semantics of "builtins" feature --- Cargo.toml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 90db08c87..ad6491083 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,8 +42,10 @@ pretty_assertions = "1" tempfile = "3" [features] -default = ["builtins", "chrono", "chrono-tz"] -builtins = ["slug", "percent-encoding", "humansize", "rand"] +#default = ["builtins"] +default = ["builtins-less-chrono"] +builtins = ["slug", "percent-encoding", "humansize", "rand", "chrono", "chrono-tz"] +builtins-less-chrono = ["slug", "percent-encoding", "humansize", "rand"] preserve_order = ["serde_json/preserve_order"] [badges] From bdf2ce3031338b1f765b45109bd6ea9c01d06863 Mon Sep 17 00:00:00 2001 From: mbeynon Date: Fri, 25 Feb 2022 11:38:38 -0500 Subject: [PATCH 3/3] Fix prev --- Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ad6491083..8902ed641 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,8 +42,7 @@ pretty_assertions = "1" tempfile = "3" [features] -#default = ["builtins"] -default = ["builtins-less-chrono"] +default = ["builtins"] builtins = ["slug", "percent-encoding", "humansize", "rand", "chrono", "chrono-tz"] builtins-less-chrono = ["slug", "percent-encoding", "humansize", "rand"] preserve_order = ["serde_json/preserve_order"]