From 3eb4254ffb05b7c0f39a57e65f0a9ed44822c943 Mon Sep 17 00:00:00 2001 From: Benjamin Halsted <bhalsted@gmail.com> Date: Fri, 30 Jul 2021 05:05:31 -0700 Subject: [PATCH] Using no_std + alloc (#279) Removed references to `std` and replaced them with references to `core` and `alloc`. Features `rocket` and `iron` still require `std`. Co-authored-by: Chris Wong <lambda.fairy@gmail.com> --- CHANGELOG.md | 3 +++ maud/src/lib.rs | 18 ++++++++++++++++-- maud_htmlescape/lib.rs | 7 ++++++- maud_macros/src/lib.rs | 3 ++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fbc70d..c810674 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 035c1b4..a2f1499 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<T: fmt::Display + ?Sized> 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("<!DOCTYPE html>"); #[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<String> { diff --git a/maud_htmlescape/lib.rs b/maud_htmlescape/lib.rs index c682c06..6f7a20c 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 f48710b..9c4148d 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) })