diff --git a/packages/fullstack/src/render.rs b/packages/fullstack/src/render.rs
index 476f514f5..fbd4bd7f3 100644
--- a/packages/fullstack/src/render.rs
+++ b/packages/fullstack/src/render.rs
@@ -24,7 +24,7 @@ impl SsrRendererPool {
route: String,
component: Component
,
props: P,
- to: &mut String,
+ to: &mut WriteBuffer,
server_context: &DioxusServerContext,
) -> Result {
let wrapper = FullstackRenderer { cfg };
@@ -40,9 +40,9 @@ impl SsrRendererPool {
let mut renderer = pool.pull(pre_renderer);
// SAFETY: The fullstack renderer will only write UTF-8 to the buffer.
- wrapper.render_before_body(unsafe { &mut to.as_mut_vec() })?;
+ wrapper.render_before_body(&mut **to)?;
renderer.render_to(to, &vdom)?;
- wrapper.render_after_body(unsafe { &mut to.as_mut_vec() })?;
+ wrapper.render_after_body(&mut **to)?;
Ok(RenderFreshness::now(None))
}
@@ -50,11 +50,11 @@ impl SsrRendererPool {
let mut renderer =
pool.pull(|| incremental_pre_renderer(cfg.incremental.as_ref().unwrap()));
Ok(renderer
- .render_to_string(
+ .render(
route,
component,
props,
- to,
+ &mut **to,
|vdom| {
let server_context = Box::new(server_context.clone());
with_server_context(server_context, || {
@@ -106,7 +106,7 @@ impl SSRState {
> + Send
+ 'a {
async move {
- let mut html = String::new();
+ let mut html = WriteBuffer { buffer: Vec::new() };
let ServeConfig { app, props, .. } = cfg;
let freshness = self
@@ -114,7 +114,12 @@ impl SSRState {
.render_to(cfg, route, *app, props.clone(), &mut html, server_context)
.await?;
- Ok(RenderResponse { html, freshness })
+ Ok(RenderResponse {
+ html: String::from_utf8(html.buffer).map_err(|err| {
+ dioxus_ssr::incremental::IncrementalRendererError::Other(Box::new(err))
+ })?,
+ freshness,
+ })
}
}
}
@@ -236,3 +241,28 @@ where
dioxus_router::incremental::pre_cache_static_routes::