lazy_template/template/
std_extensions.rs1#![cfg(feature = "std")]
2use super::{Template, TemplateApplicationError};
3use crate::Render;
4use core::fmt;
5use pipe_trait::Pipe;
6use std::io;
7
8impl<SegmentResultIntoIter, Query> Template<SegmentResultIntoIter, Query>
9where
10 SegmentResultIntoIter: IntoIterator,
11{
12 pub fn to_string<Segment, ParseError, RenderOutput, QueryOutput, QueryError, Respond>(
14 self,
15 respond: Respond,
16 ) -> Result<String, TemplateApplicationError<ParseError, QueryError, fmt::Error>>
17 where
18 SegmentResultIntoIter::Item: Into<Result<Segment, ParseError>>,
19 RenderOutput: fmt::Display,
20 Segment: Render<Respond, RenderOutput, QueryError>,
21 Respond: FnMut(Query) -> Result<QueryOutput, QueryError>,
22 {
23 let mut buf = String::new();
24 self.write_to(&mut buf, respond)?;
25 Ok(buf)
26 }
27
28 pub fn to_writer<Writer, Segment, ParseError, RenderOutput, QueryOutput, QueryError, Respond>(
31 self,
32 writer: &mut Writer,
33 respond: Respond,
34 ) -> Result<(), TemplateApplicationError<ParseError, QueryError, io::Error>>
35 where
36 Writer: io::Write,
37 SegmentResultIntoIter::Item: Into<Result<Segment, ParseError>>,
38 RenderOutput: fmt::Display,
39 Segment: Render<Respond, RenderOutput, QueryError>,
40 Respond: FnMut(Query) -> Result<QueryOutput, QueryError>,
41 {
42 let mut write_error = None;
43
44 self.apply(respond, |response| {
45 write_error = write!(writer, "{response}").err()
46 })
47 .map_err(|error| match error {
48 TemplateApplicationError::Parse(error) => TemplateApplicationError::Parse(error),
49 TemplateApplicationError::Query(error) => TemplateApplicationError::Query(error),
50 TemplateApplicationError::Write(error) => match error {},
51 })?;
52
53 if let Some(error) = write_error {
54 return error.pipe(TemplateApplicationError::Write).pipe(Err);
55 }
56
57 Ok(())
58 }
59}