pub struct Sender<T>(_);
Expand description
A Relm4 sender sends messages to a component or worker.
Implementations§
source§impl<T> Sender<T>
impl<T> Sender<T>
sourcepub fn emit(&self, message: T)
pub fn emit(&self, message: T)
Sends a message through the channel.
This method ignores errors. Only a log message will appear when sending fails.
sourcepub fn send(&self, message: T) -> Result<(), T>
pub fn send(&self, message: T) -> Result<(), T>
Sends a message through the channel.
If all receivers where dropped, Err
is returned
with the content of the message.
Examples found in repository?
relm4/examples/drawing.rs (line 134)
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
fn init(
_: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = App {
width: 100.0,
height: 100.0,
points: Vec::new(),
handler: DrawHandler::new(),
};
let area = model.handler.drawing_area();
let widgets = view_output!();
sender.command(|out, shutdown| {
shutdown
.register(async move {
loop {
tokio::time::sleep(Duration::from_millis(20)).await;
out.send(UpdatePointsMsg).unwrap();
}
})
.drop_on_shutdown()
});
ComponentParts { model, widgets }
}
More examples
relm4/examples/progress.rs (line 131)
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>, _root: &Self::Root) {
match message {
Input::Compute => {
self.computing = true;
sender.command(|out, shutdown| {
shutdown
// Performs this operation until a shutdown is triggered
.register(async move {
let mut progress = 0.0;
while progress < 1.0 {
out.send(CmdOut::Progress(progress)).unwrap();
progress += 0.1;
tokio::time::sleep(std::time::Duration::from_millis(333)).await;
}
out.send(CmdOut::Finished(Ok("42".into()))).unwrap();
})
// Perform task until a shutdown interrupts it
.drop_on_shutdown()
// Wrap into a `Pin<Box<Future>>` for return
.boxed()
});
}
}
}
relm4/examples/settings_list.rs (line 37)
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
fn main() {
gtk::Application::builder()
.application_id("org.relm4.SettingsListExample")
.launch(|_app, window| {
// Initialize a component's root widget
let component = App::builder()
// Attach the root widget to the given window.
.attach_to(&window)
// Start the component service with an initial parameter
.launch("Settings List Demo".into())
// Attach the returned receiver's messages to this closure.
.connect_receiver(move |sender, message| match message {
Output::Clicked(id) => {
eprintln!("ID {id} Clicked");
match id {
0 => xdg_open("https://github.com/Relm4/Relm4".into()),
1 => xdg_open("https://docs.rs/relm4/".into()),
2 => {
sender.send(Input::Clear).unwrap();
}
_ => (),
}
}
Output::Reload => {
sender
.send(Input::AddSetting {
description: "Browse GitHub Repository".into(),
button: "GitHub".into(),
id: 0,
})
.unwrap();
sender
.send(Input::AddSetting {
description: "Browse Documentation".into(),
button: "Docs".into(),
id: 1,
})
.unwrap();
sender
.send(Input::AddSetting {
description: "Clear List".into(),
button: "Clear".into(),
id: 2,
})
.unwrap();
}
});
println!("parent is {:?}", component.widget().toplevel_window());
});
}