use nu_stream::OutputStream; use crate::command_args::EvaluatedWholeStreamCommandArgs; use crate::maybe_text_codec::StringOrBinary; pub use crate::shell::shell_args::{CdArgs, CopyArgs, LsArgs, MkdirArgs, MvArgs, RemoveArgs}; use encoding_rs::Encoding; use futures::stream::BoxStream; use nu_errors::ShellError; use nu_source::{Span, Tag}; use std::path::{Path, PathBuf}; use std::sync::atomic::AtomicBool; use std::sync::Arc; pub(crate) mod painter; pub(crate) mod palette; pub(crate) mod shell_args; pub(crate) mod shell_manager; pub(crate) mod value_shell; pub trait Shell: std::fmt::Debug { fn is_interactive(&self) -> bool; fn name(&self) -> String; fn homedir(&self) -> Option; fn ls( &self, args: LsArgs, name: Tag, ctrl_c: Arc, ) -> Result; fn cd(&self, args: CdArgs, name: Tag) -> Result; fn cp(&self, args: CopyArgs, name: Tag, path: &str) -> Result; fn mkdir(&self, args: MkdirArgs, name: Tag, path: &str) -> Result; fn mv(&self, args: MvArgs, name: Tag, path: &str) -> Result; fn rm(&self, args: RemoveArgs, name: Tag, path: &str) -> Result; fn path(&self) -> String; fn pwd(&self, args: EvaluatedWholeStreamCommandArgs) -> Result; fn set_path(&mut self, path: String); fn open( &self, path: &Path, name: Span, with_encoding: Option<&'static Encoding>, ) -> Result>, ShellError>; fn save( &mut self, path: &Path, contents: &[u8], name: Span, ) -> Result; }