Add method to turn a CursiveRunnable into a CursiveRunner

This commit is contained in:
Alexandre Bury 2021-01-19 10:31:56 -08:00
parent 58718824fa
commit c0ddd5c302
5 changed files with 70 additions and 5 deletions

View File

@ -1,5 +1,17 @@
# Changelog # Changelog
## cursive-core 0.2.2, cursive 0.16.2
### API updates
- Add methods to turn a CursiveRunnable into a CursiveRunner.
## cursive 0.16.1
### Bugfixes
- Fix mouse input with crossterm backend.
## cursive-core 0.2.1 ## cursive-core 0.2.1
### Bugfixes ### Bugfixes

View File

@ -8,7 +8,7 @@ license = "MIT"
name = "cursive_core" name = "cursive_core"
readme = "Readme.md" readme = "Readme.md"
repository = "https://github.com/gyscos/cursive" repository = "https://github.com/gyscos/cursive"
version = "0.2.1" version = "0.2.2-alpha"
edition = "2018" edition = "2018"
[package.metadata.docs.rs] [package.metadata.docs.rs]

View File

@ -41,7 +41,8 @@ where
} }
impl<C> CursiveRunner<C> { impl<C> CursiveRunner<C> {
pub(crate) fn new(siv: C, backend: Box<dyn backend::Backend>) -> Self { /// Creates a new cursive runner wrapper.
pub fn new(siv: C, backend: Box<dyn backend::Backend>) -> Self {
CursiveRunner { CursiveRunner {
siv, siv,
backend, backend,

View File

@ -8,14 +8,14 @@ license = "MIT"
name = "cursive" name = "cursive"
readme = "../Readme.md" readme = "../Readme.md"
repository = "https://github.com/gyscos/cursive" repository = "https://github.com/gyscos/cursive"
version = "0.16.1" version = "0.16.2-alpha"
edition = "2018" edition = "2018"
[package.metadata.docs.rs] [package.metadata.docs.rs]
features = ["unstable_scroll", "markdown", "toml"] features = ["unstable_scroll", "markdown", "toml"]
[dependencies] [dependencies]
cursive_core = { path = "../cursive-core", version= "0.2.1"} cursive_core = { path = "../cursive-core", version= "0.2.2-alpha"}
crossbeam-channel = "0.5" crossbeam-channel = "0.5"
cfg-if = "1" cfg-if = "1"
wasmer_enumset = "1" wasmer_enumset = "1"

View File

@ -1,4 +1,4 @@
use crate::{backend, backends, Cursive}; use crate::{backend, backends, Cursive, CursiveRunner};
type Initializer = type Initializer =
dyn FnMut() dyn FnMut()
@ -63,6 +63,58 @@ impl CursiveRunnable {
self.siv.try_run_with(&mut self.backend_init) self.siv.try_run_with(&mut self.backend_init)
} }
/// Gets a runner with the registered backend.
///
/// Used to manually control the event loop. In most cases, running
/// `run()` will be easier.
///
/// The runner will borrow `self`; when dropped, it will clear out the
/// terminal, and the cursive instance will be ready for another run if
/// needed.
pub fn try_runner(
&mut self,
) -> Result<CursiveRunner<&mut Cursive>, Box<dyn std::error::Error>> {
Ok(self.siv.runner((self.backend_init)()?))
}
/// Gets a runner with the registered backend.
///
/// # Panics
///
/// If the backend initialization fails.
pub fn runner(&mut self) -> CursiveRunner<&mut Cursive> {
self.try_runner().unwrap()
}
/// Returns a new runner on the registered backend.
///
/// Used to manually control the event loop. In most cases, running
/// `run()` will be easier.
///
/// The runner will embed `self`; when dropped, it will clear out the
/// terminal, and the cursive instance will be dropped as well.
pub fn try_into_runner(
mut self,
) -> Result<CursiveRunner<Self>, Box<dyn std::error::Error>> {
let backend = (self.backend_init)()?;
Ok(CursiveRunner::new(self, backend))
}
/// Returns a new runner on the registered backend.
///
/// Used to manually control the event loop. In most cases, running
/// `run()` will be easier.
///
/// The runner will embed `self`; when dropped, it will clear out the
/// terminal, and the cursive instance will be dropped as well.
///
/// # Panics
///
/// If the backend initialization fails.
pub fn into_runner(self) -> CursiveRunner<Self> {
self.try_into_runner().unwrap()
}
/// Creates a new Cursive wrapper using the dummy backend. /// Creates a new Cursive wrapper using the dummy backend.
/// ///
/// Nothing will actually be output when calling `.run()`. /// Nothing will actually be output when calling `.run()`.