From 06d63bfd0a84ea85a3493f68a57db52fb306d2bb Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Fri, 22 Aug 2025 21:58:59 +1200
Subject: [PATCH 1/6] First cut of the regression logger.
---
examples/regression/Cargo.toml | 2 ++
examples/regression/src/app.rs | 7 +++++-
examples/regression/src/lib.rs | 1 +
examples/regression/src/log.rs | 35 +++++++++++++++++++++++++++++
examples/regression/src/pr_4091.rs | 8 +++++++
examples/regression/style/main.scss | 23 +++++++++++++++++++
6 files changed, 75 insertions(+), 1 deletion(-)
create mode 100644 examples/regression/src/log.rs
diff --git a/examples/regression/Cargo.toml b/examples/regression/Cargo.toml
index fb5a79b6c1..b223380ff9 100644
--- a/examples/regression/Cargo.toml
+++ b/examples/regression/Cargo.toml
@@ -54,6 +54,8 @@ site-root = "target/site"
# The site-root relative folder where all compiled output (JS, WASM and CSS) is written
# Defaults to pkg
site-pkg-dir = "pkg"
+# [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS.
+style-file = "style/main.scss"
# The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup.
site-addr = "127.0.0.1:3000"
# The port to use for automatic reload monitoring
diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs
index 402937d6e7..c146c434fc 100644
--- a/examples/regression/src/app.rs
+++ b/examples/regression/src/app.rs
@@ -1,4 +1,4 @@
-use crate::{issue_4088::Routes4088, pr_4015::Routes4015, pr_4091::Routes4091};
+use crate::{log::SimpleLogger, issue_4088::Routes4088, pr_4015::Routes4015, pr_4091::Routes4091};
use leptos::prelude::*;
use leptos_meta::{MetaTags, *};
use leptos_router::{
@@ -27,6 +27,8 @@ pub fn shell(options: LeptosOptions) -> impl IntoView {
#[component]
pub fn App() -> impl IntoView {
provide_meta_context();
+ let logger = RwSignal::new(SimpleLogger::default());
+ provide_context(logger);
let fallback = || view! { "Page not found." }.into_view();
view! {
@@ -40,6 +42,9 @@ pub fn App() -> impl IntoView {
+
+ {move || logger.get().into_render() }
+
}
}
diff --git a/examples/regression/src/lib.rs b/examples/regression/src/lib.rs
index edba82c8be..912d86d95b 100644
--- a/examples/regression/src/lib.rs
+++ b/examples/regression/src/lib.rs
@@ -2,6 +2,7 @@ pub mod app;
mod issue_4088;
mod pr_4015;
mod pr_4091;
+pub mod log;
#[cfg(feature = "hydrate")]
#[wasm_bindgen::prelude::wasm_bindgen]
diff --git a/examples/regression/src/log.rs b/examples/regression/src/log.rs
new file mode 100644
index 0000000000..a9812026eb
--- /dev/null
+++ b/examples/regression/src/log.rs
@@ -0,0 +1,35 @@
+use leptos::prelude::*;
+
+#[derive(Clone, Default)]
+pub struct SimpleLogger(Vec);
+
+impl SimpleLogger {
+ pub fn log(&mut self, msg: impl ToString) {
+ self.0.push(msg.to_string());
+ }
+}
+
+// may not be the most efficient but it gets the job done
+impl IntoRender for SimpleLogger {
+ type Output = AnyView;
+
+ fn into_render(self) -> Self::Output {
+ let entries = self.0
+ .into_iter()
+ .map(|msg| view! {
+ {msg}
+ })
+ .collect_view();
+ view! {
+
+ "Simple Logger history"
+
+
+ }
+ .into_any()
+ }
+}
diff --git a/examples/regression/src/pr_4091.rs b/examples/regression/src/pr_4091.rs
index a5ce57d681..75649cf37c 100644
--- a/examples/regression/src/pr_4091.rs
+++ b/examples/regression/src/pr_4091.rs
@@ -1,3 +1,4 @@
+use crate::log::SimpleLogger;
use leptos::{context::Provider, prelude::*};
use leptos_router::{
components::{ParentRoute, Route, A},
@@ -27,6 +28,13 @@ fn Container() -> impl IntoView {
let rw_signal = RwSignal::new(Expectations(Vec::new()));
provide_context(rw_signal);
+ let logger = expect_context::>();
+ logger.update(|logger| logger.log("Mounting pr_4091 "));
+ on_cleanup(move || {
+ leptos::logging::log!("Leaving ");
+ logger.update(|logger| logger.log("Unmounting pr_4091 "));
+ });
+
view! {
diff --git a/examples/regression/style/main.scss b/examples/regression/style/main.scss
index 853ac29a7c..dd84adf8e2 100644
--- a/examples/regression/style/main.scss
+++ b/examples/regression/style/main.scss
@@ -1,3 +1,26 @@
body {
+ margin: 0;
+ padding: 0;
+ background: #fff;
font-family: sans-serif;
+ width: 100vw;
+ height: 100vh;
+ overflow: hidden;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+}
+
+main,
+footer {
+ height: 100vh;
+ overflow: auto;
+}
+
+main {
+ width: 70vw;
+ border-right: 1px solid black;
+}
+
+footer {
+ width: 30vw;
}
From 1b45a27d97ac8d6555109ad361b30bcd9e3a631b Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Fri, 22 Aug 2025 23:36:20 +1200
Subject: [PATCH 2/6] Simplify the `SimpleLogger` usage.
---
examples/regression/src/app.rs | 6 +++---
examples/regression/src/log.rs | 23 +++++++++++++++--------
examples/regression/src/pr_4091.rs | 6 +++---
3 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs
index c146c434fc..5e4a4fb795 100644
--- a/examples/regression/src/app.rs
+++ b/examples/regression/src/app.rs
@@ -27,8 +27,8 @@ pub fn shell(options: LeptosOptions) -> impl IntoView {
#[component]
pub fn App() -> impl IntoView {
provide_meta_context();
- let logger = RwSignal::new(SimpleLogger::default());
- provide_context(logger);
+ let logger = SimpleLogger::default();
+ provide_context(logger.clone());
let fallback = || view! { "Page not found." }.into_view();
view! {
@@ -43,7 +43,7 @@ pub fn App() -> impl IntoView {
- {move || logger.get().into_render() }
+ {move || logger.render() }
}
}
diff --git a/examples/regression/src/log.rs b/examples/regression/src/log.rs
index a9812026eb..ea91e36bde 100644
--- a/examples/regression/src/log.rs
+++ b/examples/regression/src/log.rs
@@ -1,16 +1,10 @@
use leptos::prelude::*;
#[derive(Clone, Default)]
-pub struct SimpleLogger(Vec);
-
-impl SimpleLogger {
- pub fn log(&mut self, msg: impl ToString) {
- self.0.push(msg.to_string());
- }
-}
+struct SimpleLoggerInner(Vec);
// may not be the most efficient but it gets the job done
-impl IntoRender for SimpleLogger {
+impl IntoRender for SimpleLoggerInner {
type Output = AnyView;
fn into_render(self) -> Self::Output {
@@ -33,3 +27,16 @@ impl IntoRender for SimpleLogger {
.into_any()
}
}
+
+#[derive(Clone, Copy, Default)]
+pub struct SimpleLogger(RwSignal);
+
+impl SimpleLogger {
+ pub fn log(&self, msg: impl ToString) {
+ self.0.update(|vec| vec.0.push(msg.to_string()));
+ }
+
+ pub fn render(&self) -> AnyView {
+ self.0.get().into_render()
+ }
+}
diff --git a/examples/regression/src/pr_4091.rs b/examples/regression/src/pr_4091.rs
index 75649cf37c..f8009a47c4 100644
--- a/examples/regression/src/pr_4091.rs
+++ b/examples/regression/src/pr_4091.rs
@@ -28,11 +28,11 @@ fn Container() -> impl IntoView {
let rw_signal = RwSignal::new(Expectations(Vec::new()));
provide_context(rw_signal);
- let logger = expect_context::>();
- logger.update(|logger| logger.log("Mounting pr_4091 "));
+ let logger = expect_context::();
+ logger.log("Mounting pr_4091 ");
on_cleanup(move || {
leptos::logging::log!("Leaving ");
- logger.update(|logger| logger.log("Unmounting pr_4091 "));
+ logger.log("Unmounting pr_4091 ");
});
view! {
From 01952ec314b86e891e228a40e36e318c0910f8fb Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Fri, 22 Aug 2025 23:51:22 +1200
Subject: [PATCH 3/6] Styles for the simple logger.
---
examples/regression/style/main.scss | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/examples/regression/style/main.scss b/examples/regression/style/main.scss
index dd84adf8e2..b83a0d1653 100644
--- a/examples/regression/style/main.scss
+++ b/examples/regression/style/main.scss
@@ -24,3 +24,31 @@ main {
footer {
width: 30vw;
}
+
+#SimpleLogger {
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+#SimpleLogger > h1 {
+ padding-left: 1em;
+}
+
+#SimpleLogger > div#logs {
+ overflow: auto;
+ display: flex;
+ flex-direction: column-reverse;
+}
+
+#SimpleLogger > div#logs > ul {
+ border-top: 1px #ccc solid;
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+#SimpleLogger > div#logs > ul > li {
+ padding-left: 1em;
+ border-bottom: 1px #ccc solid;
+}
From 0514b4332d984cf792f5e6b70b1906a675d9d23c Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Sat, 23 Aug 2025 00:50:33 +1200
Subject: [PATCH 4/6] Internal readme for regression example.
---
examples/regression/src/app.rs | 36 +++++++++++++++++++++++++++++
examples/regression/style/main.scss | 2 ++
2 files changed, 38 insertions(+)
diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs
index 5e4a4fb795..2d950d4b1a 100644
--- a/examples/regression/src/app.rs
+++ b/examples/regression/src/app.rs
@@ -36,6 +36,7 @@ pub fn App() -> impl IntoView {
+
@@ -59,6 +60,7 @@ fn HomePage() -> impl IntoView {
view! {
"Listing of regression tests"
+ (What is this)
"4091"
@@ -68,3 +70,37 @@ fn HomePage() -> impl IntoView {
}
}
+
+static EXAMPLE: &'static str = "\
+use leptos::prelude::*;
+use crate::log::SimpleLogger;
+let logger = expect_context::();
+logger.log(\"Hello world!\");";
+
+#[component]
+fn Readme() -> impl IntoView {
+ view! {
+ "About regression example"
+ "
+ This is a collection of components containing the minimum reproducible example that
+ should work without issues, but have possibly failed some time in the past in the form
+ of a regression. The components are self contained in their respective modules and
+ should be accompanied by an end-to-end test suite written in Gherkin, to allow a human
+ user to also easily see the expected behavior.
+ "
+ // TODO probably establish some naming conventions here?
+ "
+ A logger output pane is provided on the side, which may be invoked within a component
+ in this example like so:
+ "
+ {EXAMPLE}
+ "
+ This "();
+ logger.log("Hello world!");
+ }>"link" " is hooked with the above, so accessing that should result in that
+ message printed. ""Return to listing" ".
+ "
+ }
+}
diff --git a/examples/regression/style/main.scss b/examples/regression/style/main.scss
index b83a0d1653..5efb9a8a9d 100644
--- a/examples/regression/style/main.scss
+++ b/examples/regression/style/main.scss
@@ -17,6 +17,8 @@ footer {
}
main {
+ box-sizing: border-box;
+ padding: 0 1em;
width: 70vw;
border-right: 1px solid black;
}
From 37d13b91d3ee760b26934516fd05e5aa4414e3c8 Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Sat, 23 Aug 2025 02:54:28 +1200
Subject: [PATCH 5/6] Test out the Simple Logger.
---
.../regression/e2e/features/logger.feature | 30 +++++++++++++++++
.../regression/e2e/tests/fixtures/check.rs | 25 +++++++++++++++
.../regression/e2e/tests/fixtures/find.rs | 9 ++++++
.../e2e/tests/fixtures/world/action_steps.rs | 1 +
.../e2e/tests/fixtures/world/check_steps.rs | 32 ++++++++++++++++++-
examples/regression/src/app.rs | 10 ++++--
6 files changed, 103 insertions(+), 4 deletions(-)
create mode 100644 examples/regression/e2e/features/logger.feature
diff --git a/examples/regression/e2e/features/logger.feature b/examples/regression/e2e/features/logger.feature
new file mode 100644
index 0000000000..6bc54175e5
--- /dev/null
+++ b/examples/regression/e2e/features/logger.feature
@@ -0,0 +1,30 @@
+@check_logger
+Feature: The simple logger.
+
+ Scenario: Visiting readme should have no log messages.
+ Given I see the app
+ When I access (What is this)
+ Then I see 0 log messages
+
+ Scenario: Visiting readme and using the example link should log a message.
+ Given I see the app
+ When I access (What is this)
+ And I select the link example link
+ Then I counted 1 log message
+ And I find the following being the most recent log messages
+ | Hello world! |
+
+ Scenario: Visiting readme and generate multiple log messages
+ Given I see the app
+ When I access (What is this)
+ And I select the following links
+ | example link |
+ | example link |
+ | other link |
+ | other link |
+ | example link |
+ Then I counted 5 log message
+ And I find the following being the most recent log messages
+ | Something else. |
+ | Something else. |
+ | Hello world! |
diff --git a/examples/regression/e2e/tests/fixtures/check.rs b/examples/regression/e2e/tests/fixtures/check.rs
index 8847e224eb..29510920a3 100644
--- a/examples/regression/e2e/tests/fixtures/check.rs
+++ b/examples/regression/e2e/tests/fixtures/check.rs
@@ -18,3 +18,28 @@ pub async fn element_exists(client: &Client, id: &str) -> Result<()> {
.expect(&format!("could not find element with id `{id}`"));
Ok(())
}
+
+pub async fn count_log_messages(client: &Client, count: usize) -> Result<()> {
+ let elements = find::log_message_elements(client)
+ .await?;
+ assert_eq!(elements.len(), count);
+ Ok(())
+}
+
+pub async fn last_log_messages(client: &Client, expected: &[&str]) -> Result<()> {
+ let elements = find::log_message_elements(client)
+ .await?;
+ let elements_len = elements.len();
+ let expected_len = expected.len();
+ assert!(
+ elements_len >= expected_len,
+ "the messages available is not equal or greater than what is being expected",
+ );
+
+ let mut result = Vec::new();
+ for element in elements.into_iter().skip(elements_len - expected_len) {
+ result.push(element.text().await?);
+ }
+ assert_eq!(result, expected);
+ Ok(())
+}
diff --git a/examples/regression/e2e/tests/fixtures/find.rs b/examples/regression/e2e/tests/fixtures/find.rs
index d93ea56b81..f3adb4367f 100644
--- a/examples/regression/e2e/tests/fixtures/find.rs
+++ b/examples/regression/e2e/tests/fixtures/find.rs
@@ -21,3 +21,12 @@ pub async fn link_with_text(client: &Client, text: &str) -> Result {
pub async fn element_by_id(client: &Client, id: &str) -> Result {
Ok(client.wait().for_element(Locator::Id(id)).await?)
}
+
+pub async fn log_message_elements(client: &Client) -> Result> {
+ let elements = element_by_id(client, "logs")
+ .await
+ .expect("the simple logger must be present")
+ .find_all(Locator::Css("ul li"))
+ .await?;
+ Ok(elements)
+}
diff --git a/examples/regression/e2e/tests/fixtures/world/action_steps.rs b/examples/regression/e2e/tests/fixtures/world/action_steps.rs
index 0bc50bf8e5..3128604741 100644
--- a/examples/regression/e2e/tests/fixtures/world/action_steps.rs
+++ b/examples/regression/e2e/tests/fixtures/world/action_steps.rs
@@ -13,6 +13,7 @@ async fn i_open_the_app(world: &mut AppWorld) -> Result<()> {
#[given(regex = "^I can access regression test (.*)$")]
#[when(regex = "^I select the link (.*)$")]
+#[when(regex = "^I access (.*)$")]
async fn i_select_the_link(world: &mut AppWorld, text: String) -> Result<()> {
let client = &world.client;
action::click_link(client, &text).await?;
diff --git a/examples/regression/e2e/tests/fixtures/world/check_steps.rs b/examples/regression/e2e/tests/fixtures/world/check_steps.rs
index 88679891e6..42f9de4daa 100644
--- a/examples/regression/e2e/tests/fixtures/world/check_steps.rs
+++ b/examples/regression/e2e/tests/fixtures/world/check_steps.rs
@@ -1,6 +1,6 @@
use crate::fixtures::{check, world::AppWorld};
use anyhow::{Ok, Result};
-use cucumber::then;
+use cucumber::{gherkin::Step, then};
#[then(regex = r"^I see the result is empty$")]
async fn i_see_the_result_is_empty(world: &mut AppWorld) -> Result<()> {
@@ -25,3 +25,33 @@ async fn i_see_the_navbar(world: &mut AppWorld) -> Result<()> {
check::element_exists(client, "nav").await?;
Ok(())
}
+
+#[then(regex = r"^I counted ([0-9]+) log message$")]
+#[then(regex = r"^I counted ([0-9]+) log messages$")]
+#[then(regex = r"^I see ([0-9]+) log message$")]
+#[then(regex = r"^I see ([0-9]+) log messages$")]
+async fn i_counted_log_messages(world: &mut AppWorld, count: usize) -> Result<()> {
+ let client = &world.client;
+ check::count_log_messages(client, count).await?;
+ Ok(())
+}
+
+#[then(regex = r"^I find the following being the most recent log messages$")]
+async fn i_find_the_following_being_the_most_recent_log_messages(
+ world: &mut AppWorld,
+ step: &Step,
+) -> Result<()> {
+ let client = &world.client;
+
+ let expected = step.table
+ .as_ref()
+ .expect("the table must be present")
+ .rows
+ .iter()
+ .map(|row| row[0].as_str())
+ .collect::>();
+
+ check::last_log_messages(client, &expected).await?;
+
+ Ok(())
+}
diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs
index 2d950d4b1a..7b63722c2c 100644
--- a/examples/regression/src/app.rs
+++ b/examples/regression/src/app.rs
@@ -86,7 +86,7 @@ fn Readme() -> impl IntoView {
should work without issues, but have possibly failed some time in the past in the form
of a regression. The components are self contained in their respective modules and
should be accompanied by an end-to-end test suite written in Gherkin, to allow a human
- user to also easily see the expected behavior.
+ user to also reproduce and validate the expected behavior from the written instructions.
"
// TODO probably establish some naming conventions here?
"
@@ -99,8 +99,12 @@ fn Readme() -> impl IntoView {
use crate::log::SimpleLogger;
let logger = expect_context::();
logger.log("Hello world!");
- }>"link"" is hooked with the above, so accessing that should result in that
- message printed. ""Return to listing" ".
+ }>"example link"" is hooked with the above, so accessing that should result in that
+ message printed, while this "();
+ logger.log("Something else.");
+ }>"other link" " will log something else. ""Return to listing" ".
"
}
}
From 86fc2fc51b9edcc6663335fe9c9c146687dc7578 Mon Sep 17 00:00:00 2001
From: Tommy Yu
Date: Sat, 23 Aug 2025 03:18:22 +1200
Subject: [PATCH 6/6] cargo fmt/clippy
---
examples/regression/e2e/tests/fixtures/check.rs | 11 ++++++-----
.../e2e/tests/fixtures/world/check_steps.rs | 8 ++++++--
examples/regression/src/app.rs | 9 ++++++---
examples/regression/src/lib.rs | 2 +-
examples/regression/src/log.rs | 9 ++++++---
5 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/examples/regression/e2e/tests/fixtures/check.rs b/examples/regression/e2e/tests/fixtures/check.rs
index 29510920a3..35af24e14f 100644
--- a/examples/regression/e2e/tests/fixtures/check.rs
+++ b/examples/regression/e2e/tests/fixtures/check.rs
@@ -20,15 +20,16 @@ pub async fn element_exists(client: &Client, id: &str) -> Result<()> {
}
pub async fn count_log_messages(client: &Client, count: usize) -> Result<()> {
- let elements = find::log_message_elements(client)
- .await?;
+ let elements = find::log_message_elements(client).await?;
assert_eq!(elements.len(), count);
Ok(())
}
-pub async fn last_log_messages(client: &Client, expected: &[&str]) -> Result<()> {
- let elements = find::log_message_elements(client)
- .await?;
+pub async fn last_log_messages(
+ client: &Client,
+ expected: &[&str],
+) -> Result<()> {
+ let elements = find::log_message_elements(client).await?;
let elements_len = elements.len();
let expected_len = expected.len();
assert!(
diff --git a/examples/regression/e2e/tests/fixtures/world/check_steps.rs b/examples/regression/e2e/tests/fixtures/world/check_steps.rs
index 42f9de4daa..4b9b0ab18e 100644
--- a/examples/regression/e2e/tests/fixtures/world/check_steps.rs
+++ b/examples/regression/e2e/tests/fixtures/world/check_steps.rs
@@ -30,7 +30,10 @@ async fn i_see_the_navbar(world: &mut AppWorld) -> Result<()> {
#[then(regex = r"^I counted ([0-9]+) log messages$")]
#[then(regex = r"^I see ([0-9]+) log message$")]
#[then(regex = r"^I see ([0-9]+) log messages$")]
-async fn i_counted_log_messages(world: &mut AppWorld, count: usize) -> Result<()> {
+async fn i_counted_log_messages(
+ world: &mut AppWorld,
+ count: usize,
+) -> Result<()> {
let client = &world.client;
check::count_log_messages(client, count).await?;
Ok(())
@@ -43,7 +46,8 @@ async fn i_find_the_following_being_the_most_recent_log_messages(
) -> Result<()> {
let client = &world.client;
- let expected = step.table
+ let expected = step
+ .table
.as_ref()
.expect("the table must be present")
.rows
diff --git a/examples/regression/src/app.rs b/examples/regression/src/app.rs
index 7b63722c2c..a2125dbb65 100644
--- a/examples/regression/src/app.rs
+++ b/examples/regression/src/app.rs
@@ -1,4 +1,7 @@
-use crate::{log::SimpleLogger, issue_4088::Routes4088, pr_4015::Routes4015, pr_4091::Routes4091};
+use crate::{
+ issue_4088::Routes4088, log::SimpleLogger, pr_4015::Routes4015,
+ pr_4091::Routes4091,
+};
use leptos::prelude::*;
use leptos_meta::{MetaTags, *};
use leptos_router::{
@@ -28,7 +31,7 @@ pub fn shell(options: LeptosOptions) -> impl IntoView {
pub fn App() -> impl IntoView {
provide_meta_context();
let logger = SimpleLogger::default();
- provide_context(logger.clone());
+ provide_context(logger);
let fallback = || view! { "Page not found." }.into_view();
view! {
@@ -71,7 +74,7 @@ fn HomePage() -> impl IntoView {
}
}
-static EXAMPLE: &'static str = "\
+static EXAMPLE: &str = "\
use leptos::prelude::*;
use crate::log::SimpleLogger;
let logger = expect_context::();
diff --git a/examples/regression/src/lib.rs b/examples/regression/src/lib.rs
index 912d86d95b..140f639d75 100644
--- a/examples/regression/src/lib.rs
+++ b/examples/regression/src/lib.rs
@@ -1,8 +1,8 @@
pub mod app;
mod issue_4088;
+pub mod log;
mod pr_4015;
mod pr_4091;
-pub mod log;
#[cfg(feature = "hydrate")]
#[wasm_bindgen::prelude::wasm_bindgen]
diff --git a/examples/regression/src/log.rs b/examples/regression/src/log.rs
index ea91e36bde..6b7535a5b3 100644
--- a/examples/regression/src/log.rs
+++ b/examples/regression/src/log.rs
@@ -8,10 +8,13 @@ impl IntoRender for SimpleLoggerInner {
type Output = AnyView;
fn into_render(self) -> Self::Output {
- let entries = self.0
+ let entries = self
+ .0
.into_iter()
- .map(|msg| view! {
- {msg}
+ .map(|msg| {
+ view! {
+ {msg}
+ }
})
.collect_view();
view! {