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::futures;
|
||||||
use crate::futures::MaybeSend;
|
use crate::futures::MaybeSend;
|
||||||
|
|
||||||
|
use futures::channel::mpsc;
|
||||||
use futures::Stream;
|
use futures::Stream;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
|
|
@ -118,3 +119,23 @@ impl<T> fmt::Debug for Command<T> {
|
||||||
command.fmt(f)
|
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,
|
color, Alignment, Background, BorderRadius, Color, ContentFit, Degrees,
|
||||||
Gradient, Length, Padding, Pixels, Point, Radians, Rectangle, Size, Vector,
|
Gradient, Length, Padding, Pixels, Point, Radians, Rectangle, Size, Vector,
|
||||||
};
|
};
|
||||||
pub use crate::runtime::Command;
|
|
||||||
|
|
||||||
pub mod clipboard {
|
pub mod clipboard {
|
||||||
//! Access the 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 {
|
pub mod subscription {
|
||||||
//! Listen to external events in your application.
|
//! Listen to external events in your application.
|
||||||
pub use iced_futures::subscription::{
|
pub use iced_futures::subscription::{
|
||||||
|
|
@ -287,6 +291,7 @@ pub mod widget {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub use application::Application;
|
pub use application::Application;
|
||||||
|
pub use command::Command;
|
||||||
pub use error::Error;
|
pub use error::Error;
|
||||||
pub use event::Event;
|
pub use event::Event;
|
||||||
pub use executor::Executor;
|
pub use executor::Executor;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue