diff --git a/Cargo.lock b/Cargo.lock index 44b20b2..3676e2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1667,6 +1667,7 @@ dependencies = [ "include_dir", "insta", "loco-rs", + "markdown", "migration", "rstest", "sea-orm", @@ -2433,6 +2434,15 @@ dependencies = [ "value-bag", ] +[[package]] +name = "markdown" +version = "1.0.0-alpha.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6491e6c702bf7e3b24e769d800746d5f2c06a6c6a2db7992612e0f429029e81" +dependencies = [ + "unicode-id", +] + [[package]] name = "matchers" version = "0.1.0" @@ -5012,6 +5022,12 @@ version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +[[package]] +name = "unicode-id" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/Cargo.toml b/Cargo.toml index 87e1e3b..86df5c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,7 @@ axum = { version = "0.7.5", features = ["multipart"] } include_dir = "0.7" uuid = { version = "1.6.0", features = ["v4"] } tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } +markdown = "1.0.0-alpha.21" # view engine i18n fluent-templates = { version = "0.8.0", features = ["tera"] } @@ -45,6 +46,7 @@ axum-range = "0.4.0" axum-extra = { version = "0.9.4", features = ["multipart", "typed-header", "cookie"] } bytes = "1.8.0" tera = "1.20.0" + # /view engine [[bin]] diff --git a/src/filters/markdown.rs b/src/filters/markdown.rs new file mode 100644 index 0000000..a839e56 --- /dev/null +++ b/src/filters/markdown.rs @@ -0,0 +1,7 @@ +use std::collections::HashMap; + +pub fn markdown_filter(value: &tera::Value, _: &HashMap) -> tera::Result { + let value = tera::from_value::(value.clone())?; + let md = markdown::to_html(&value); + Ok(tera::to_value(md)?) +} \ No newline at end of file diff --git a/src/filters/mod.rs b/src/filters/mod.rs new file mode 100644 index 0000000..d7c69bb --- /dev/null +++ b/src/filters/mod.rs @@ -0,0 +1 @@ +pub mod markdown; \ No newline at end of file diff --git a/src/initializers/view_engine.rs b/src/initializers/view_engine.rs index f0a5ffb..a83f6ba 100644 --- a/src/initializers/view_engine.rs +++ b/src/initializers/view_engine.rs @@ -7,6 +7,8 @@ use loco_rs::{ }; use tracing::info; +use crate::filters; + const I18N_DIR: &str = "assets/i18n"; const I18N_SHARED: &str = "assets/i18n/shared.ftl"; @@ -28,6 +30,9 @@ impl Initializer for ViewEngineInitializer { tera_engine .tera .register_function("t", FluentLoader::new(arc)); + tera_engine + .tera + .register_filter("markdown", filters::markdown::markdown_filter); info!("locales loaded"); } diff --git a/src/lib.rs b/src/lib.rs index c9fdb7a..0e4603f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,3 +7,4 @@ pub mod services; pub mod tasks; pub mod views; pub mod workers; +pub mod filters; \ No newline at end of file