From 3f668c2d04f11384ae523d902e0805ab2ea75755 Mon Sep 17 00:00:00 2001 From: Arijit Basu Date: Fri, 17 Sep 2021 09:17:28 +0530 Subject: [PATCH] Improve runner API Some API improvements on top of #324 --- examples/run.rs | 2 +- src/app.rs | 12 +++++++++--- src/bin/xplr.rs | 5 +++-- src/cli.rs | 2 ++ src/runner.rs | 10 +++++++++- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/examples/run.rs b/examples/run.rs index 1f42889..7d98bed 100644 --- a/examples/run.rs +++ b/examples/run.rs @@ -1,5 +1,5 @@ fn main() { - match xplr::runner::Runner::new(xplr::cli::Cli::default()).and_then(|a| a.run()) { + match xplr::app::runner().and_then(|a| a.run()) { Ok(Some(out)) => print!("{}", out), Ok(None) => {} Err(err) => { diff --git a/src/app.rs b/src/app.rs index a5681dd..2a5728f 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,4 @@ -use crate::cli; +use crate::cli::Cli; use crate::config::Config; use crate::config::Mode; use crate::explorer; @@ -2900,6 +2900,12 @@ impl App { } } -pub fn runner(cli: cli::Cli) -> Result { - Runner::new(cli) +/// Create a new runner object passing the default arguments +pub fn runner() -> Result { + Runner::new() +} + +/// Create a new runner object passing the given arguments +pub fn from_cli(cli: Cli) -> Result { + Runner::from_cli(cli) } diff --git a/src/bin/xplr.rs b/src/bin/xplr.rs index 638ad3f..851d6af 100644 --- a/src/bin/xplr.rs +++ b/src/bin/xplr.rs @@ -2,7 +2,8 @@ use std::env; -use xplr::{cli::Cli, runner::Runner}; +use xplr::app; +use xplr::cli::Cli; fn main() { let cli = Cli::parse(env::args()).unwrap_or_else(|e| { @@ -46,7 +47,7 @@ fn main() { } else if cli.version { println!("xplr {}", xplr::app::VERSION); } else { - match Runner::new(cli).and_then(|a| a.run()) { + match app::from_cli(cli).and_then(|a| a.run()) { Ok(Some(out)) => print!("{}", out), Ok(None) => {} Err(err) => { diff --git a/src/cli.rs b/src/cli.rs index b8fa1a3..87ea444 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -5,6 +5,7 @@ use std::{env, io}; use crate::app; +/// The arguments to pass #[derive(Debug, Clone, Default)] pub struct Cli { pub version: bool, @@ -17,6 +18,7 @@ pub struct Cli { } impl Cli { + /// Parse arguments from the command-line pub fn parse(args: env::Args) -> Result { let mut args: VecDeque = args.skip(1).collect(); let mut cli = Self::default(); diff --git a/src/runner.rs b/src/runner.rs index 51bc131..914fc12 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -1,6 +1,7 @@ #![allow(clippy::too_many_arguments)] use crate::app; +use crate::cli::Cli; use crate::event_reader; use crate::explorer; use crate::lua; @@ -106,7 +107,13 @@ pub struct Runner { } impl Runner { - pub fn new(cli: crate::cli::Cli) -> Result { + /// Create a new runner object passing the default arguments + pub fn new() -> Result { + Self::from_cli(Default::default()) + } + + /// Create a new runner object passing the given arguments + pub fn from_cli(cli: Cli) -> Result { let basedir = std::env::current_dir()?; let mut pwd = cli .path @@ -129,6 +136,7 @@ impl Runner { }) } + /// Run the instance pub fn run(self) -> Result> { // Why unsafe? See https://github.com/sayanarijit/xplr/issues/309 let lua = unsafe { mlua::Lua::unsafe_new() };