From 78f8dcc3ac7c4299000746e5134d0266f3178064 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Sun, 17 Aug 2025 08:22:28 -0400 Subject: [PATCH] Replace `rinja` with `askama` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit “New versions of `rinja` will be released under the name `askama`.” https://crates.io/crates/rinja --- Cargo.lock | 91 ++++++++++++++++++-------------------------- Cargo.toml | 5 ++- README.md | 2 +- src/duplicates.rs | 2 +- src/instance_info.rs | 2 +- src/post.rs | 2 +- src/search.rs | 2 +- src/settings.rs | 2 +- src/subreddit.rs | 2 +- src/user.rs | 2 +- src/utils.rs | 2 +- 11 files changed, 51 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d881f80..ef0ae92a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,6 +77,43 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +[[package]] +name = "askama" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4" +dependencies = [ + "askama_derive", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f" +dependencies = [ + "askama_parser", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "syn", +] + +[[package]] +name = "askama_parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358" +dependencies = [ + "memchr", + "winnow", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -1097,22 +1134,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1359,6 +1380,7 @@ name = "redlib" version = "0.36.0" dependencies = [ "arc-swap", + "askama", "async-recursion", "base2048", "base64 0.22.1", @@ -1384,7 +1406,6 @@ dependencies = [ "pulldown-cmark", "regex", "revision", - "rinja", "route-recognizer", "rss", "rust-embed", @@ -1474,42 +1495,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rinja" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc4940d00595430b3d7d5a01f6222b5e5b51395d1120bdb28d854bb8abb17a5" -dependencies = [ - "itoa", - "rinja_derive", -] - -[[package]] -name = "rinja_derive" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d9ed0146aef6e2825f1b1515f074510549efba38d71f4554eec32eb36ba18b" -dependencies = [ - "memchr", - "mime", - "mime_guess", - "proc-macro2", - "quote", - "rinja_parser", - "rustc-hash", - "syn", -] - -[[package]] -name = "rinja_parser" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f9a866e2e00a7a1fb27e46e9e324a6f7c0e7edc4543cae1d38f4e4a100c610" -dependencies = [ - "memchr", - "nom", -] - [[package]] name = "rle-decode-fast" version = "1.0.3" diff --git a/Cargo.toml b/Cargo.toml index 0596bc29..6d39e67b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,10 @@ edition = "2021" default-run = "redlib" [dependencies] -rinja = { version = "0.3.4", default-features = false } +askama = { version = "0.14.0", default-features = false, features = [ + "std", + "derive", +] } cached = { version = "0.54.0", features = ["async"] } clap = { version = "4.4.11", default-features = false, features = [ "std", diff --git a/README.md b/README.md index fcae126c..666ff6d3 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Redlib currently implements most of Reddit's (signed-out) functionalities but st - [Rust](https://www.rust-lang.org/) - Programming language - [Hyper](https://github.com/hyperium/hyper) - HTTP server and client -- [Rinja](https://github.com/rinja-rs/rinja) - Templating engine +- [Askama](https://github.com/askama-rs/askama) - Templating engine - [Rustls](https://github.com/rustls/rustls) - TLS library ## How is it different from other Reddit front ends? diff --git a/src/duplicates.rs b/src/duplicates.rs index b533198c..5a7653ef 100644 --- a/src/duplicates.rs +++ b/src/duplicates.rs @@ -5,8 +5,8 @@ use crate::server::RequestExt; use crate::subreddit::{can_access_quarantine, quarantine}; use crate::utils::{error, filter_posts, get_filters, nsfw_landing, parse_post, template, Post, Preferences}; +use askama::Template; use hyper::{Body, Request, Response}; -use rinja::Template; use serde_json::Value; use std::borrow::ToOwned; use std::collections::HashSet; diff --git a/src/instance_info.rs b/src/instance_info.rs index a573953d..6fd165b5 100644 --- a/src/instance_info.rs +++ b/src/instance_info.rs @@ -3,10 +3,10 @@ use crate::{ server::RequestExt, utils::{ErrorTemplate, Preferences}, }; +use askama::Template; use build_html::{Container, Html, HtmlContainer, Table}; use hyper::{http::Error, Body, Request, Response}; use once_cell::sync::Lazy; -use rinja::Template; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; diff --git a/src/post.rs b/src/post.rs index 20b917da..dbad6293 100644 --- a/src/post.rs +++ b/src/post.rs @@ -10,9 +10,9 @@ use crate::utils::{ }; use hyper::{Body, Request, Response}; +use askama::Template; use once_cell::sync::Lazy; use regex::Regex; -use rinja::Template; use std::collections::{HashMap, HashSet}; // STRUCTS diff --git a/src/search.rs b/src/search.rs index 88dcfdd8..34597605 100644 --- a/src/search.rs +++ b/src/search.rs @@ -7,10 +7,10 @@ use crate::{ server::RequestExt, subreddit::{can_access_quarantine, quarantine}, }; +use askama::Template; use hyper::{Body, Request, Response}; use once_cell::sync::Lazy; use regex::Regex; -use rinja::Template; // STRUCTS struct SearchParams { diff --git a/src/settings.rs b/src/settings.rs index e38b4ecc..e1206319 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -6,10 +6,10 @@ use std::collections::HashMap; use crate::server::ResponseExt; use crate::subreddit::join_until_size_limit; use crate::utils::{deflate_decompress, redirect, template, Preferences}; +use askama::Template; use cookie::Cookie; use futures_lite::StreamExt; use hyper::{Body, Request, Response}; -use rinja::Template; use time::{Duration, OffsetDateTime}; use tokio::time::timeout; use url::form_urlencoded; diff --git a/src/subreddit.rs b/src/subreddit.rs index d631e318..687dc33e 100644 --- a/src/subreddit.rs +++ b/src/subreddit.rs @@ -7,10 +7,10 @@ use crate::utils::{ Subreddit, }; use crate::{client::json, server::RequestExt, server::ResponseExt}; +use askama::Template; use cookie::Cookie; use htmlescape::decode_html; use hyper::{Body, Request, Response}; -use rinja::Template; use chrono::DateTime; use once_cell::sync::Lazy; diff --git a/src/user.rs b/src/user.rs index d135000e..a352d255 100644 --- a/src/user.rs +++ b/src/user.rs @@ -5,10 +5,10 @@ use crate::client::json; use crate::server::RequestExt; use crate::utils::{error, filter_posts, format_url, get_filters, nsfw_landing, param, setting, template, Post, Preferences, User}; use crate::{config, utils}; +use askama::Template; use chrono::DateTime; use htmlescape::decode_html; use hyper::{Body, Request, Response}; -use rinja::Template; use time::{macros::format_description, OffsetDateTime}; // STRUCTS diff --git a/src/utils.rs b/src/utils.rs index 984c91a2..bff13774 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -6,6 +6,7 @@ use crate::config::{self, get_setting}; // CRATES // use crate::{client::json, server::RequestExt}; +use askama::Template; use cookie::Cookie; use hyper::{Body, Request, Response}; use libflate::deflate::{Decoder, Encoder}; @@ -13,7 +14,6 @@ use log::error; use once_cell::sync::Lazy; use regex::Regex; use revision::revisioned; -use rinja::Template; use rust_embed::RustEmbed; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde_json::Value;