diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bbbd46..ecca991 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added - `document` API for creating Gemini documents -- preliminary timeout API, incl a special case for complex MIMEs by [@Alch-Emi](https://github.com/Alch-Emi) -- `Response::success_with_body` by [@Alch-Emi](https://github.com/Alch-Emi) +- preliminary timeout API, incl a special case for complex MIMEs by [@Alch-Emi] +- `Response::success_with_body` by [@Alch-Emi] - `redirect_temporary_lossy` for `Response` and `ResponseHeader` - `bad_request_lossy` for `Response` and `ResponseHeader` - support for a lot more mime-types in `guess_mime_from_path`, backed by the `mime_guess` crate -- customizable TLS cert & key paths by [@Alch-Emi](https://github.com/Alch-Emi) -- `server_dir` default feature for serve_dir utils [@Alch-Emi](https://github.com/Alch-Emi) +- customizable TLS cert & key paths by [@Alch-Emi] +- `server_dir` default feature for serve_dir utils [@Alch-Emi] +- Docments can be converted into responses with std::convert::Into [@Alch-Emi] ### Improved - build time and size by [@Alch-Emi](https://github.com/Alch-Emi) ### Changed @@ -37,4 +38,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.2.0] - 2020-11-14 ### Added -- Access to client certificates by [@Alch-Emi](https://github.com/Alch-Emi) +- Access to client certificates by [@Alch-Emi] + +[@Alch-Emi]: https://github.com/Alch-Emi diff --git a/examples/document.rs b/examples/document.rs index bc72f49..9d4bdc2 100644 --- a/examples/document.rs +++ b/examples/document.rs @@ -16,9 +16,7 @@ async fn main() -> Result<()> { } async fn handle_request(_request: Request) -> Result { - let mut document = Document::new(); - - document + let response = Document::new() .add_preformatted(include_str!("northstar_logo.txt")) .add_blank_line() .add_link("https://docs.rs/northstar", "Documentation") @@ -41,7 +39,7 @@ async fn handle_request(_request: Request) -> Result { .add_preformatted_with_alt("sh", concat!( "mkdir cert && cd cert\n", "openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365", - )); - - Ok(Response::document(document)) + )) + .into(); + Ok(response) } diff --git a/src/types/body.rs b/src/types/body.rs index d2da102..a7481c3 100644 --- a/src/types/body.rs +++ b/src/types/body.rs @@ -2,6 +2,8 @@ use tokio::io::AsyncRead; #[cfg(feature="serve_dir")] use tokio::fs::File; +use std::borrow::Borrow; + use crate::types::Document; pub enum Body { @@ -9,9 +11,9 @@ pub enum Body { Reader(Box), } -impl From for Body { - fn from(document: Document) -> Self { - Self::from(document.to_string()) +impl> From for Body { + fn from(document: D) -> Self { + Self::from(document.borrow().to_string()) } } diff --git a/src/types/response.rs b/src/types/response.rs index 991d511..dceec4e 100644 --- a/src/types/response.rs +++ b/src/types/response.rs @@ -1,4 +1,5 @@ use std::convert::TryInto; +use std::borrow::Borrow; use anyhow::*; use uriparse::URIReference; @@ -19,7 +20,7 @@ impl Response { } } - pub fn document(document: Document) -> Self { + pub fn document(document: impl Borrow) -> Self { Self::success_with_body(&GEMINI_MIME, document) } @@ -94,3 +95,9 @@ impl Response { self.body.take() } } + +impl> From for Response { + fn from(doc: D) -> Self { + Self::document(doc) + } +}