Implement command::channel helper
It is analogous to `subscription::channel`.
This commit is contained in:
parent
3b7d479534
commit
a761448858
2 changed files with 27 additions and 1 deletions
|
|
@ -7,6 +7,7 @@ use crate::core::widget;
|
|||
use crate::futures::futures;
|
||||
use crate::futures::MaybeSend;
|
||||
|
||||
use futures::channel::mpsc;
|
||||
use futures::Stream;
|
||||
use std::fmt;
|
||||
use std::future::Future;
|
||||
|
|
@ -118,3 +119,23 @@ impl<T> fmt::Debug for Command<T> {
|
|||
command.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a [`Command`] that produces the `Message`s published from a [`Future`]
|
||||
/// to an [`mpsc::Sender`] with the given bounds.
|
||||
pub fn channel<Fut, Message>(
|
||||
size: usize,
|
||||
f: impl FnOnce(mpsc::Sender<Message>) -> Fut + MaybeSend + 'static,
|
||||
) -> Command<Message>
|
||||
where
|
||||
Fut: Future<Output = ()> + MaybeSend + 'static,
|
||||
Message: 'static + MaybeSend,
|
||||
{
|
||||
use futures::future;
|
||||
use futures::stream::{self, StreamExt};
|
||||
|
||||
let (sender, receiver) = mpsc::channel(size);
|
||||
|
||||
let runner = stream::once(f(sender)).filter_map(|_| future::ready(None));
|
||||
|
||||
Command::single(Action::Stream(Box::pin(stream::select(receiver, runner))))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,7 +190,6 @@ pub use crate::core::{
|
|||
color, Alignment, Background, BorderRadius, Color, ContentFit, Degrees,
|
||||
Gradient, Length, Padding, Pixels, Point, Radians, Rectangle, Size, Vector,
|
||||
};
|
||||
pub use crate::runtime::Command;
|
||||
|
||||
pub mod clipboard {
|
||||
//! Access the clipboard.
|
||||
|
|
@ -239,6 +238,11 @@ pub mod mouse {
|
|||
};
|
||||
}
|
||||
|
||||
pub mod command {
|
||||
//! Run asynchronous actions.
|
||||
pub use crate::runtime::command::{channel, Command};
|
||||
}
|
||||
|
||||
pub mod subscription {
|
||||
//! Listen to external events in your application.
|
||||
pub use iced_futures::subscription::{
|
||||
|
|
@ -287,6 +291,7 @@ pub mod widget {
|
|||
}
|
||||
|
||||
pub use application::Application;
|
||||
pub use command::Command;
|
||||
pub use error::Error;
|
||||
pub use event::Event;
|
||||
pub use executor::Executor;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue