Add elided lifetimes to view helpers in examples

This commit is contained in:
Héctor Ramón Jiménez 2025-06-24 14:29:36 +02:00
parent bde4572bc5
commit 5ca5000cdc
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
50 changed files with 95 additions and 84 deletions

View file

@ -36,7 +36,7 @@ impl Arc {
self.cache.clear();
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
Canvas::new(self).width(Fill).height(Fill).into()
}

View file

@ -34,7 +34,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
container(hover(
self.bezier.view(&self.curves).map(Message::AddCurve),
if self.curves.is_empty() {

View file

@ -217,7 +217,7 @@ impl Generator {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
match self {
Self::Loading => center("Loading...").into(),
Self::Done => center(

View file

@ -38,7 +38,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let default_checkbox = checkbox("Default", self.default)
.on_toggle(Message::DefaultToggled);

View file

@ -48,7 +48,7 @@ impl Clock {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let canvas = canvas(self as &Self).width(Fill).height(Fill);
container(canvas).padding(20).into()

View file

@ -56,7 +56,7 @@ impl ColorPalette {
self.theme = Theme::new(to_color(srgb));
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let base = self.theme.base;
let srgb = to_rgb(base);
@ -149,7 +149,7 @@ impl Theme {
.chain(self.higher.iter())
}
pub fn view(&self) -> Element<Message> {
pub fn view(&self) -> Element<'_, Message> {
Canvas::new(self).width(Fill).height(Fill).into()
}
@ -296,7 +296,7 @@ trait ColorSpace: Sized {
}
impl<C: ColorSpace + Copy> ColorPicker<C> {
fn view(&self, color: C) -> Element<C> {
fn view(&self, color: C) -> Element<'_, C> {
let [c1, c2, c3] = color.components();
let [cr1, cr2, cr3] = C::COMPONENT_RANGES;

View file

@ -47,7 +47,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let combo_box = combo_box(
&self.languages,
"Type a language...",

View file

@ -28,7 +28,7 @@ impl Counter {
}
}
fn view(&self) -> Column<Message> {
fn view(&self) -> Column<'_, Message> {
column![
button("Increment").on_press(Message::Increment),
text(self.value).size(50),

View file

@ -74,7 +74,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let border::Radius {
top_left,
top_right,

View file

@ -103,7 +103,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let content = column![
circle(self.radius),
text!("Radius: {:.2}", self.radius),

View file

@ -61,7 +61,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let downloads =
Column::with_children(self.downloads.iter().map(Download::view))
.push(
@ -152,7 +152,7 @@ impl Download {
}
}
pub fn view(&self) -> Element<Message> {
pub fn view(&self) -> Element<'_, Message> {
let current_progress = match &self.state {
State::Idle => 0.0,
State::Downloading { progress, .. } => *progress,

View file

@ -144,7 +144,7 @@ impl Editor {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let controls = row![
action(new_icon(), "New file", Some(Message::NewFile)),
action(

View file

@ -55,7 +55,7 @@ impl Events {
event::listen().map(Message::EventOccurred)
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let events = Column::with_children(
self.last
.iter()

View file

@ -29,7 +29,7 @@ impl Exit {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let content = if self.show_confirm {
column![
"Are you sure you want to exit?",

View file

@ -91,7 +91,7 @@ impl Image {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let i_am_ferris = column![
"Hello!",
Element::from(

View file

@ -111,7 +111,7 @@ impl GameOfLife {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let version = self.version;
let selected_speed = self.next_speed.unwrap_or(self.speed);
let controls = view_controls(
@ -320,7 +320,7 @@ mod grid {
}
}
pub fn view(&self) -> Element<Message> {
pub fn view(&self) -> Element<'_, Message> {
Canvas::new(self).width(Fill).height(Fill).into()
}

View file

@ -51,7 +51,7 @@ impl Gradient {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let Self {
start,
end,

View file

@ -38,7 +38,7 @@ impl Controls {
}
}
pub fn view(&self) -> Element<Message, Theme, Renderer> {
pub fn view(&self) -> Element<'_, Message, Theme, Renderer> {
let background_color = self.background_color;
let sliders = row![

View file

@ -68,7 +68,7 @@ impl Layout {
})
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let header = row![
text(self.example.title).size(20).font(Font::MONOSPACE),
horizontal_space(),
@ -121,7 +121,7 @@ impl Layout {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, Eq)]
struct Example {
title: &'static str,
view: fn() -> Element<'static, Message>,
@ -190,7 +190,7 @@ impl Example {
Self::LIST.get(index + 1).copied().unwrap_or(self)
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
(self.view)()
}
}
@ -201,6 +201,12 @@ impl Default for Example {
}
}
impl PartialEq for Example {
fn eq(&self, other: &Self) -> bool {
self.title == other.title
}
}
fn centered<'a>() -> Element<'a, Message> {
center(text("I am centered!").size(50)).into()
}

View file

@ -154,7 +154,7 @@ impl App {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let options = lazy(self.version, |_| {
let mut items: Vec<_> = self.items.iter().cloned().collect();

View file

@ -37,7 +37,7 @@ impl LoadingSpinners {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let column = [
&easing::EMPHASIZED,
&easing::EMPHASIZED_DECELERATE,

View file

@ -30,7 +30,7 @@ impl Loupe {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
center(loupe(
3.0,
column![

View file

@ -34,7 +34,7 @@ Now, let's show the actual counter by putting it all together in our __view logi
use iced::widget::{button, column, text, Column};
impl Counter {
pub fn view(&self) -> Column<Message> {
pub fn view(&self) -> Column<'_, Message> {
// We use a column: a simple vertical layout
column![
// The increment button. We tell it to produce an

View file

@ -174,7 +174,7 @@ impl Markdown {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let editor = text_editor(&self.raw)
.placeholder("Type your Markdown here...")
.on_action(Message::Edit)

View file

@ -92,7 +92,7 @@ impl App {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let content = container(
column![
row![text("Top Left"), horizontal_space(), text("Top Right")]

View file

@ -130,7 +130,7 @@ impl Example {
}
}
fn view(&self, window_id: window::Id) -> Element<Message> {
fn view(&self, window_id: window::Id) -> Element<'_, Message> {
if let Some(window) = self.windows.get(&window_id) {
center(window.view(window_id)).into()
} else {
@ -168,7 +168,7 @@ impl Window {
}
}
fn view(&self, id: window::Id) -> Element<Message> {
fn view(&self, id: window::Id) -> Element<'_, Message> {
let scale_input = column![
text("Window scale factor:"),
text_input("Window Scale", &self.scale_input)

View file

@ -43,7 +43,7 @@ impl Multitouch {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
Canvas::new(self).width(Fill).height(Fill).into()
}
}

View file

@ -129,7 +129,7 @@ impl Example {
})
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let focus = self.focus;
let total_panes = self.panes.len();

View file

@ -24,7 +24,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let pick_list = pick_list(
&Language::ALL[..],
self.selected_language,

View file

@ -63,7 +63,7 @@ impl Pokedex {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let content: Element<_> = match self {
Pokedex::Loading => {
text("Searching for Pokémon...").size(40).into()
@ -100,7 +100,7 @@ struct Pokemon {
impl Pokemon {
const TOTAL: u16 = 807;
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
row![
image::viewer(self.image.clone()),
column![

View file

@ -30,7 +30,7 @@ impl Progress {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let bar = progress_bar(0.0..=100.0, self.value);
column![

View file

@ -63,7 +63,7 @@ impl QRGenerator {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let title = text("QR Code Generator").size(70);
let input =

View file

@ -118,7 +118,7 @@ impl ScrollableDemo {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let scrollbar_width_slider = slider(
0..=15,
self.scrollbar_width,

View file

@ -1,7 +1,9 @@
use iced::mouse;
use iced::widget::canvas::{self, Canvas, Event, Geometry};
use iced::widget::{column, row, slider, text};
use iced::{Center, Color, Fill, Point, Rectangle, Renderer, Size, Theme};
use iced::{
Center, Color, Element, Fill, Point, Rectangle, Renderer, Size, Theme,
};
use rand::Rng;
use std::fmt::Debug;
@ -46,7 +48,7 @@ impl SierpinskiEmulator {
self.graph.redraw();
}
fn view(&self) -> iced::Element<'_, Message> {
fn view(&self) -> Element<'_, Message> {
column![
Canvas::new(&self.graph).width(Fill).height(Fill),
row![

View file

@ -27,7 +27,7 @@ impl Slider {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let h_slider = container(
slider(1..=100, self.value, Message::SliderChanged)
.default(50)

View file

@ -55,7 +55,7 @@ impl SolarSystem {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
canvas(&self.state).width(Fill).height(Fill).into()
}

View file

@ -83,7 +83,7 @@ impl Stopwatch {
Subscription::batch(vec![tick, keyboard::on_key_press(handle_hotkey)])
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
const MINUTE: u64 = 60;
const HOUR: u64 = 60 * MINUTE;

View file

@ -65,7 +65,7 @@ impl Styling {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let choose_theme = column![
text("Theme:"),
pick_list(Theme::ALL, Some(&self.theme), Message::ThemeChanged)

View file

@ -24,7 +24,7 @@ impl Tiger {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let handle = svg::Handle::from_path(format!(
"{}/resources/tiger.svg",
env!("CARGO_MANIFEST_DIR")

View file

@ -47,7 +47,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
use bytesize::ByteSize;
let content: Element<_> = match self {

View file

@ -34,7 +34,7 @@ impl TheMatrix {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
canvas(self).width(Fill).height(Fill).into()
}

View file

@ -182,7 +182,7 @@ impl Todos {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
match self {
Todos::Loading => loading_message(),
Todos::Loaded(State {
@ -334,7 +334,7 @@ impl Task {
}
}
fn view(&self, i: usize) -> Element<TaskMessage> {
fn view(&self, i: usize) -> Element<'_, TaskMessage> {
match &self.state {
TaskState::Idle => {
let checkbox = checkbox(&self.description, self.completed)
@ -381,7 +381,10 @@ impl Task {
}
}
fn view_controls(tasks: &[Task], current_filter: Filter) -> Element<Message> {
fn view_controls(
tasks: &[Task],
current_filter: Filter,
) -> Element<'_, Message> {
let tasks_left = tasks.iter().filter(|task| !task.completed).count();
let filter_button = |label, filter, current_filter| {
@ -580,7 +583,7 @@ mod tests {
use iced_test::selector::id;
use iced_test::{Error, Simulator};
fn simulator(todos: &Todos) -> Simulator<Message> {
fn simulator(todos: &Todos) -> Simulator<'_, Message> {
Simulator::with_settings(
Settings {
fonts: vec![Todos::ICON_FONT.into()],

View file

@ -33,7 +33,7 @@ impl Tooltip {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let tooltip = tooltip(
button("Press to change position")
.on_press(Message::ChangePosition),

View file

@ -141,7 +141,7 @@ impl Tour {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let controls =
row![]
.push_maybe(self.screen.previous().is_some().then(|| {
@ -197,7 +197,7 @@ impl Tour {
}
}
fn welcome(&self) -> Column<Message> {
fn welcome(&self) -> Column<'_, Message> {
Self::container("Welcome!")
.push(
"This is a simple tour meant to showcase a bunch of \
@ -244,7 +244,7 @@ impl Tour {
)
}
fn slider(&self) -> Column<Message> {
fn slider(&self) -> Column<'_, Message> {
Self::container("Slider")
.push(
"A slider allows you to smoothly select a value from a range \
@ -258,7 +258,7 @@ impl Tour {
.push(text(self.slider.to_string()).width(Fill).align_x(Center))
}
fn rows_and_columns(&self) -> Column<Message> {
fn rows_and_columns(&self) -> Column<'_, Message> {
let row_radio = radio(
"Row",
Layout::Row,
@ -303,7 +303,7 @@ impl Tour {
.push(spacing_section)
}
fn text(&self) -> Column<Message> {
fn text(&self) -> Column<'_, Message> {
let size = self.text_size;
let color = self.text_color;
@ -339,7 +339,7 @@ impl Tour {
.push(color_section)
}
fn radio(&self) -> Column<Message> {
fn radio(&self) -> Column<'_, Message> {
let question = column![
text("Iced is written in...").size(24),
column(
@ -374,7 +374,7 @@ impl Tour {
)
}
fn toggler(&self) -> Column<Message> {
fn toggler(&self) -> Column<'_, Message> {
Self::container("Toggler")
.push("A toggler is mostly used to enable or disable something.")
.push(
@ -387,7 +387,7 @@ impl Tour {
)
}
fn image(&self) -> Column<Message> {
fn image(&self) -> Column<'_, Message> {
let width = self.image_width;
let filter_method = self.image_filter_method;
@ -406,7 +406,7 @@ impl Tour {
.align_x(Center)
}
fn scrollable(&self) -> Column<Message> {
fn scrollable(&self) -> Column<'_, Message> {
Self::container("Scrollable")
.push(
"Iced supports scrollable content. Try it out! Find the \
@ -428,7 +428,7 @@ impl Tour {
.push(text("You made it!").width(Fill).size(50).align_x(Center))
}
fn text_input(&self) -> Column<Message> {
fn text_input(&self) -> Column<'_, Message> {
let value = &self.input_value;
let is_secure = self.input_is_secure;
let is_showing_icon = self.input_is_showing_icon;
@ -474,7 +474,7 @@ impl Tour {
)
}
fn debugger(&self) -> Column<Message> {
fn debugger(&self) -> Column<'_, Message> {
Self::container("Debugger")
.push(
"You can ask Iced to visually explain the layouting of the \
@ -491,7 +491,7 @@ impl Tour {
.push("Feel free to go back and take a look.")
}
fn end(&self) -> Column<Message> {
fn end(&self) -> Column<'_, Message> {
Self::container("You reached the end!")
.push("This tour will be updated as more features are added.")
.push("Make sure to keep an eye on it!")

View file

@ -31,7 +31,7 @@ impl App {
event::listen_url().map(Message::UrlReceived)
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let content = match &self.url {
Some(url) => text(url),
None => text("No URL received yet!"),

View file

@ -48,7 +48,7 @@ impl VectorialText {
self.state.cache.clear();
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let slider_with_label = |label, range, value, message: fn(f32) -> _| {
column![
row![text(label), horizontal_space(), text!("{:.2}", value)],

View file

@ -59,7 +59,7 @@ impl Example {
}
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let data_row = |label, value, color| {
row![
text(label),

View file

@ -90,7 +90,7 @@ impl WebSocket {
Subscription::run(echo::connect).map(Message::Echo)
}
fn view(&self) -> Element<Message> {
fn view(&self) -> Element<'_, Message> {
let message_log: Element<_> = if self.messages.is_empty() {
center(
text("Your messages will appear here...")

View file

@ -34,7 +34,7 @@
//! iced::run(update, view)
//! }
//! # fn update(state: &mut (), message: ()) {}
//! # fn view(state: &()) -> iced::Element<()> { iced::widget::text("").into() }
//! # fn view(state: &()) -> iced::Element<'_, ()> { iced::widget::text("").into() }
//! ```
//!
//! Define an `update` function to __change__ your state:
@ -55,7 +55,7 @@
//! use iced::widget::{button, text};
//! use iced::Element;
//!
//! fn view(counter: &u64) -> Element<Message> {
//! fn view(counter: &u64) -> Element<'_, Message> {
//! button(text(counter)).on_press(Message::Increment).into()
//! }
//! # #[derive(Clone)]
@ -95,7 +95,7 @@
//! }
//! }
//!
//! fn view(counter: &Counter) -> Element<Message> {
//! fn view(counter: &Counter) -> Element<'_, Message> {
//! button(text(counter.value)).on_press(Message::Increment).into()
//! }
//! ```
@ -115,7 +115,7 @@
//! use iced::widget::{button, column, text};
//! use iced::Element;
//!
//! fn view(counter: &Counter) -> Element<Message> {
//! fn view(counter: &Counter) -> Element<'_, Message> {
//! column![
//! text(counter.value).size(20),
//! button("Increment").on_press(Message::Increment),
@ -144,7 +144,7 @@
//! use iced::widget::{column, container, row};
//! use iced::{Fill, Element};
//!
//! fn view(state: &State) -> Element<Message> {
//! fn view(state: &State) -> Element<'_, Message> {
//! container(
//! column![
//! "Top",
@ -187,7 +187,7 @@
//! use iced::widget::container;
//! use iced::Element;
//!
//! fn view(state: &State) -> Element<Message> {
//! fn view(state: &State) -> Element<'_, Message> {
//! container("I am 300px tall!").height(300).into()
//! }
//! ```
@ -216,7 +216,7 @@
//! Theme::TokyoNight
//! }
//! # fn update(state: &mut State, message: ()) {}
//! # fn view(state: &State) -> iced::Element<()> { iced::widget::text("").into() }
//! # fn view(state: &State) -> iced::Element<'_, ()> { iced::widget::text("").into() }
//! ```
//!
//! The `theme` function takes the current state of the application, allowing the
@ -237,7 +237,7 @@
//! use iced::widget::container;
//! use iced::Element;
//!
//! fn view(state: &State) -> Element<Message> {
//! fn view(state: &State) -> Element<'_, Message> {
//! container("I am a rounded box!").style(container::rounded_box).into()
//! }
//! ```
@ -252,7 +252,7 @@
//! use iced::widget::button;
//! use iced::{Element, Theme};
//!
//! fn view(state: &State) -> Element<Message> {
//! fn view(state: &State) -> Element<'_, Message> {
//! button("I am a styled button!").style(|theme: &Theme, status| {
//! let palette = theme.extended_palette();
//!
@ -359,7 +359,7 @@
//! }
//! # fn new() -> State { State }
//! # fn update(state: &mut State, message: Message) {}
//! # fn view(state: &State) -> iced::Element<Message> { iced::widget::text("").into() }
//! # fn view(state: &State) -> iced::Element<'_, Message> { iced::widget::text("").into() }
//! ```
//!
//! A [`Subscription`] is [a _declarative_ builder of streams](Subscription#the-lifetime-of-a-subscription)
@ -452,7 +452,7 @@
//! }
//! }
//!
//! fn view(state: &State) -> Element<Message> {
//! fn view(state: &State) -> Element<'_, Message> {
//! match &state.screen {
//! Screen::Contacts(contacts) => contacts.view().map(Message::Contacts),
//! Screen::Conversation(conversation) => conversation.view().map(Message::Conversation),

View file

@ -339,8 +339,8 @@ impl Span {
///
/// fn view(&self) -> Element<'_, Message> {
/// markdown::view(&self.markdown, Theme::TokyoNight)
/// .map(Message::LinkClicked)
/// .into()
/// .map(Message::LinkClicked)
/// .into()
/// }
///
/// fn update(state: &mut State, message: Message) {