diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fbc70da..c8106746 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## [Unreleased] +- Support `no_std` + `alloc`. + [#278](https://github.com/lambda-fairy/maud/issues/278) + ## [0.22.2] - 2021-01-09 - Don't require `?` suffix for empty attributes. The old syntax is kept for backward compatibility. diff --git a/maud/src/lib.rs b/maud/src/lib.rs index 035c1b40..a2f14995 100644 --- a/maud/src/lib.rs +++ b/maud/src/lib.rs @@ -1,3 +1,5 @@ +#![no_std] + //! A macro for writing HTML templates. //! //! This documentation only describes the runtime API. For a general @@ -7,7 +9,10 @@ #![doc(html_root_url = "https://docs.rs/maud/0.22.2")] -use std::fmt::{self, Write}; +extern crate alloc; + +use alloc::string::String; +use core::fmt::{self, Write}; pub use maud_macros::{html, html_debug}; @@ -89,8 +94,9 @@ impl Render for T { #[doc(hidden)] pub mod render { use crate::Render; + use alloc::string::String; + use core::fmt::Write; use maud_htmlescape::Escaper; - use std::fmt::Write; pub trait RenderInternal { fn __maud_render_to(&self, w: &mut String); @@ -167,7 +173,11 @@ pub const DOCTYPE: PreEscaped<&'static str> = PreEscaped(""); #[cfg(feature = "iron")] mod iron_support { + extern crate std; + use crate::PreEscaped; + use alloc::boxed::Box; + use alloc::string::String; use iron::headers::ContentType; use iron::modifier::{Modifier, Set}; use iron::modifiers::Header; @@ -191,7 +201,10 @@ mod iron_support { #[cfg(feature = "rocket")] mod rocket_support { + extern crate std; + use crate::PreEscaped; + use alloc::string::String; use rocket::http::{ContentType, Status}; use rocket::request::Request; use rocket::response::{Responder, Response}; @@ -211,6 +224,7 @@ mod rocket_support { mod actix_support { use crate::PreEscaped; use actix_web_dep::{Error, HttpRequest, HttpResponse, Responder}; + use alloc::string::String; use futures_util::future::{ok, Ready}; impl Responder for PreEscaped { diff --git a/maud_htmlescape/lib.rs b/maud_htmlescape/lib.rs index c682c06c..6f7a20ca 100644 --- a/maud_htmlescape/lib.rs +++ b/maud_htmlescape/lib.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(test), no_std)] + //! Internal support code used by the [Maud] template engine. //! //! You should not need to depend on this crate directly. @@ -6,7 +8,10 @@ #![doc(html_root_url = "https://docs.rs/maud_htmlescape/0.17.0")] -use std::fmt; +extern crate alloc; + +use alloc::string::String; +use core::fmt; /// An adapter that escapes HTML special characters. /// diff --git a/maud_macros/src/lib.rs b/maud_macros/src/lib.rs index f48710b6..9c4148d1 100644 --- a/maud_macros/src/lib.rs +++ b/maud_macros/src/lib.rs @@ -35,8 +35,9 @@ fn expand(input: TokenStream) -> TokenStream { let markups = parse::parse(input); let stmts = generate::generate(markups, output_ident.clone()); quote!({ + extern crate alloc; extern crate maud; - let mut #output_ident = ::std::string::String::with_capacity(#size_hint); + let mut #output_ident = alloc::string::String::with_capacity(#size_hint); #stmts maud::PreEscaped(#output_ident) })