diff options
Diffstat (limited to 'crates/shirabe/src/io')
| -rw-r--r-- | crates/shirabe/src/io/base_io.rs | 42 | ||||
| -rw-r--r-- | crates/shirabe/src/io/console_io.rs | 47 | ||||
| -rw-r--r-- | crates/shirabe/src/io/io_interface.rs | 72 | ||||
| -rw-r--r-- | crates/shirabe/src/io/null_io.rs | 37 |
4 files changed, 122 insertions, 76 deletions
diff --git a/crates/shirabe/src/io/base_io.rs b/crates/shirabe/src/io/base_io.rs index f467de1..d4e8f73 100644 --- a/crates/shirabe/src/io/base_io.rs +++ b/crates/shirabe/src/io/base_io.rs @@ -98,7 +98,7 @@ pub trait BaseIO: IOInterface { let custom_headers = config.get("custom-headers"); let client_certificate = config.get("client-certificate"); - if let Some(map) = bitbucket_oauth.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = bitbucket_oauth.as_opt().and_then(|v| v.as_array()) { for (domain, cred) in map.clone() { if let Some(cred_map) = cred.as_array() { let consumer_key = cred_map @@ -115,7 +115,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = github_oauth.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = github_oauth.as_opt().and_then(|v| v.as_array()) { for (domain, token) in map.clone() { let token_str = token.as_string().unwrap_or("").to_string(); let github_domains = config.get("github-domains"); @@ -139,9 +139,9 @@ pub trait BaseIO: IOInterface { ); let mut inner = IndexMap::new(); inner.insert("github-domains".to_string(), Box::new(merged)); - let mut outer = IndexMap::new(); - outer.insert("config".to_string(), Box::new(PhpMixed::Array(inner))); - config.merge(PhpMixed::Array(outer), "implicit-due-to-auth"); + let mut config_outer: IndexMap<String, PhpMixed> = IndexMap::new(); + config_outer.insert("config".to_string(), PhpMixed::Array(inner)); + config.merge(&config_outer, "implicit-due-to-auth"); } if !Preg::is_match(r"^[.A-Za-z0-9_]+$", &token_str).unwrap_or(false) { @@ -161,7 +161,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = gitlab_oauth.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = gitlab_oauth.as_opt().and_then(|v| v.as_array()) { for (domain, token) in map.clone() { let gitlab_domains = config.get("gitlab-domains"); if domain != "gitlab.com" @@ -184,9 +184,9 @@ pub trait BaseIO: IOInterface { ); let mut inner = IndexMap::new(); inner.insert("gitlab-domains".to_string(), Box::new(merged)); - let mut outer = IndexMap::new(); - outer.insert("config".to_string(), Box::new(PhpMixed::Array(inner))); - config.merge(PhpMixed::Array(outer), "implicit-due-to-auth"); + let mut config_outer: IndexMap<String, PhpMixed> = IndexMap::new(); + config_outer.insert("config".to_string(), PhpMixed::Array(inner)); + config.merge(&config_outer, "implicit-due-to-auth"); } let token_str = if let Some(arr) = token.as_array() { @@ -201,7 +201,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = gitlab_token.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = gitlab_token.as_opt().and_then(|v| v.as_array()) { for (domain, token) in map.clone() { let gitlab_domains = config.get("gitlab-domains"); if domain != "gitlab.com" @@ -224,9 +224,9 @@ pub trait BaseIO: IOInterface { ); let mut inner = IndexMap::new(); inner.insert("gitlab-domains".to_string(), Box::new(merged)); - let mut outer = IndexMap::new(); - outer.insert("config".to_string(), Box::new(PhpMixed::Array(inner))); - config.merge(PhpMixed::Array(outer), "implicit-due-to-auth"); + let mut config_outer: IndexMap<String, PhpMixed> = IndexMap::new(); + config_outer.insert("config".to_string(), PhpMixed::Array(inner)); + config.merge(&config_outer, "implicit-due-to-auth"); } let (username, password) = if let Some(arr) = token.as_array() { @@ -250,7 +250,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = forgejo_token.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = forgejo_token.as_opt().and_then(|v| v.as_array()) { for (domain, cred) in map.clone() { let forgejo_domains = config.get("forgejo-domains"); if !in_array( @@ -271,9 +271,9 @@ pub trait BaseIO: IOInterface { ); let mut inner = IndexMap::new(); inner.insert("forgejo-domains".to_string(), Box::new(merged)); - let mut outer = IndexMap::new(); - outer.insert("config".to_string(), Box::new(PhpMixed::Array(inner))); - config.merge(PhpMixed::Array(outer), "implicit-due-to-auth"); + let mut config_outer: IndexMap<String, PhpMixed> = IndexMap::new(); + config_outer.insert("config".to_string(), PhpMixed::Array(inner)); + config.merge(&config_outer, "implicit-due-to-auth"); } if let Some(cred_map) = cred.as_array() { @@ -291,7 +291,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = http_basic.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = http_basic.as_opt().and_then(|v| v.as_array()) { for (domain, cred) in map.clone() { if let Some(cred_map) = cred.as_array() { let username = cred_map @@ -308,14 +308,14 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = bearer_token.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = bearer_token.as_opt().and_then(|v| v.as_array()) { for (domain, token) in map.clone() { let token_str = token.as_string().unwrap_or("").to_string(); self.check_and_set_authentication(domain, token_str, Some("bearer".to_string())); } } - if let Some(map) = custom_headers.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = custom_headers.as_opt().and_then(|v| v.as_array()) { for (domain, headers) in map.clone() { if !headers.is_null() { let json_str = json_encode_ex(&headers, 0).unwrap_or_default(); @@ -328,7 +328,7 @@ pub trait BaseIO: IOInterface { } } - if let Some(map) = client_certificate.as_ref().and_then(|v| v.as_array()) { + if let Some(map) = client_certificate.as_opt().and_then(|v| v.as_array()) { for (domain, cred) in map.clone() { if let Some(cred_map) = cred.as_array() { let local_cert = cred_map diff --git a/crates/shirabe/src/io/console_io.rs b/crates/shirabe/src/io/console_io.rs index 91a15d3..6f17a3e 100644 --- a/crates/shirabe/src/io/console_io.rs +++ b/crates/shirabe/src/io/console_io.rs @@ -420,38 +420,38 @@ impl IOInterface for ConsoleIO { self.output.is_decorated() } - fn write(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - let messages = Self::sanitize(messages, true); + fn write3(&mut self, message: &str, newline: bool, verbosity: i64) { + let message = Self::sanitize(message, true); - self.do_write(messages, newline, false, verbosity, false); + self.do_write(message, newline, false, verbosity, false); } - fn write_error(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - let messages = Self::sanitize(messages, true); + fn write_error3(&mut self, message: &str, newline: bool, verbosity: i64) { + let message = Self::sanitize(message, true); - self.do_write(messages, newline, true, verbosity, false); + self.do_write(message, newline, true, verbosity, false); } - fn write_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - self.do_write(messages, newline, false, verbosity, true); + fn write_raw3(&mut self, message: &str, newline: bool, verbosity: i64) { + self.do_write(message, newline, false, verbosity, true); } - fn write_error_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - self.do_write(messages, newline, true, verbosity, true); + fn write_error_raw3(&mut self, message: &str, newline: bool, verbosity: i64) { + self.do_write(message, newline, true, verbosity, true); } - fn overwrite(&mut self, messages: PhpMixed, newline: bool, size: Option<i64>, verbosity: i64) { - self.do_overwrite(messages, newline, size, false, verbosity); + fn overwrite4(&mut self, message: &str, newline: bool, size: Option<i64>, verbosity: i64) { + self.do_overwrite(message, newline, size, false, verbosity); } - fn overwrite_error( + fn overwrite_error4( &mut self, - messages: PhpMixed, + message: &str, newline: bool, size: Option<i64>, verbosity: i64, ) { - self.do_overwrite(messages, newline, size, true, verbosity); + self.do_overwrite(message, newline, size, true, verbosity); } fn ask(&mut self, question: String, default: PhpMixed) -> PhpMixed { @@ -471,14 +471,17 @@ impl IOInterface for ConsoleIO { fn ask_confirmation(&mut self, question: String, default: bool) -> bool { let helper = self.helper_set.get("question"); - let default_mixed = PhpMixed::Bool(default); + // TODO(phase-b): Self::sanitize returns PhpMixed but new() expects String; + // also true/false regexes need to come through composer/symfony defaults. + let sanitized = Self::sanitize(PhpMixed::String(question), true) + .as_string() + .unwrap_or("") + .to_string(); let question = StrictConfirmationQuestion::new( - Self::sanitize(PhpMixed::String(question), true), - if is_string(&default_mixed) { - Self::sanitize(default_mixed, true) - } else { - default_mixed - }, + sanitized, + default, + "/^y(?:es)?$/i".to_string(), + "/^no?$/i".to_string(), ); helper diff --git a/crates/shirabe/src/io/io_interface.rs b/crates/shirabe/src/io/io_interface.rs index 3826bb3..e78b608 100644 --- a/crates/shirabe/src/io/io_interface.rs +++ b/crates/shirabe/src/io/io_interface.rs @@ -11,7 +11,7 @@ pub const VERBOSE: i64 = 4; pub const VERY_VERBOSE: i64 = 8; pub const DEBUG: i64 = 16; -pub trait IOInterface: LoggerInterface { +pub trait IOInterface: LoggerInterface + std::fmt::Debug { fn is_interactive(&self) -> bool; fn is_verbose(&self) -> bool; @@ -22,23 +22,65 @@ pub trait IOInterface: LoggerInterface { fn is_decorated(&self) -> bool; - fn write(&mut self, messages: PhpMixed, newline: bool, verbosity: i64); + fn write(&mut self, message: &str) { + self.write3(message, true, NORMAL) + } + fn write2(&mut self, message: &str, newline: bool) { + self.write3(message, newline, NORMAL) + } + fn write_no_newline(&mut self, message: &str) { + self.write3(message, false, NORMAL) + } + fn write3(&mut self, message: &str, newline: bool, verbosity: i64); - fn write_error(&mut self, messages: PhpMixed, newline: bool, verbosity: i64); + fn write_error(&mut self, message: &str) { + self.write_error3(message, true, NORMAL) + } + fn write_error2(&mut self, message: &str, newline: bool) { + self.write_error3(message, newline, NORMAL) + } + fn write_error_no_newline(&mut self, message: &str) { + self.write_error3(message, false, NORMAL) + } + fn write_error3(&mut self, message: &str, newline: bool, verbosity: i64); - fn write_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64); + fn write_raw(&mut self, message: &str) { + self.write_raw3(message, true, NORMAL) + } + fn write_raw2(&mut self, message: &str, newline: bool) { + self.write_raw3(message, newline, NORMAL) + } + fn write_raw3(&mut self, message: &str, newline: bool, verbosity: i64); - fn write_error_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64); + fn write_error_raw(&mut self, message: &str) { + self.write_error_raw3(message, true, NORMAL) + } + fn write_error_raw2(&mut self, message: &str, newline: bool) { + self.write_error_raw3(message, newline, NORMAL) + } + fn write_error_raw3(&mut self, message: &str, newline: bool, verbosity: i64); - fn overwrite(&mut self, messages: PhpMixed, newline: bool, size: Option<i64>, verbosity: i64); + fn overwrite(&mut self, message: &str) { + self.overwrite4(message, true, None, NORMAL) + } + fn overwrite2(&mut self, message: &str, newline: bool) { + self.overwrite4(message, newline, None, NORMAL) + } + fn overwrite3(&mut self, message: &str, newline: bool, size: Option<i64>) { + self.overwrite4(message, newline, size, NORMAL) + } + fn overwrite4(&mut self, message: &str, newline: bool, size: Option<i64>, verbosity: i64); - fn overwrite_error( - &mut self, - messages: PhpMixed, - newline: bool, - size: Option<i64>, - verbosity: i64, - ); + fn overwrite_error(&mut self, message: &str) { + self.overwrite_error4(message, true, None, NORMAL) + } + fn overwrite_error2(&mut self, message: &str, newline: bool) { + self.overwrite_error4(message, newline, None, NORMAL) + } + fn overwrite_error3(&mut self, message: &str, newline: bool, size: Option<i64>) { + self.overwrite_error4(message, newline, size, NORMAL) + } + fn overwrite_error4(&mut self, message: &str, newline: bool, size: Option<i64>, verbosity: i64); fn ask(&mut self, question: String, default: PhpMixed) -> PhpMixed; @@ -78,4 +120,8 @@ pub trait IOInterface: LoggerInterface { ); fn load_configuration(&mut self, config: &mut Config) -> anyhow::Result<()>; + + fn clone_box(&self) -> Box<dyn IOInterface> { + todo!() + } } diff --git a/crates/shirabe/src/io/null_io.rs b/crates/shirabe/src/io/null_io.rs index f229839..4ec5be0 100644 --- a/crates/shirabe/src/io/null_io.rs +++ b/crates/shirabe/src/io/null_io.rs @@ -10,6 +10,14 @@ pub struct NullIO { authentications: indexmap::IndexMap<String, indexmap::IndexMap<String, Option<String>>>, } +impl NullIO { + pub fn new() -> Self { + Self { + authentications: indexmap::IndexMap::new(), + } + } +} + impl IOInterface for NullIO { fn is_interactive(&self) -> bool { false @@ -31,22 +39,19 @@ impl IOInterface for NullIO { false } - fn write(&mut self, _messages: PhpMixed, _newline: bool, _verbosity: i64) {} + fn write3(&mut self, _message: &str, _newline: bool, _verbosity: i64) {} - fn write_error(&mut self, _messages: PhpMixed, _newline: bool, _verbosity: i64) {} + fn write_error3(&mut self, _message: &str, _newline: bool, _verbosity: i64) {} - fn overwrite( - &mut self, - _messages: PhpMixed, - _newline: bool, - _size: Option<i64>, - _verbosity: i64, - ) { - } + fn write_raw3(&mut self, _message: &str, _newline: bool, _verbosity: i64) {} + + fn write_error_raw3(&mut self, _message: &str, _newline: bool, _verbosity: i64) {} - fn overwrite_error( + fn overwrite4(&mut self, _message: &str, _newline: bool, _size: Option<i64>, _verbosity: i64) {} + + fn overwrite_error4( &mut self, - _messages: PhpMixed, + _message: &str, _newline: bool, _size: Option<i64>, _verbosity: i64, @@ -87,14 +92,6 @@ impl IOInterface for NullIO { default } - fn write_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - <Self as BaseIO>::write_raw(self, messages, newline, verbosity) - } - - fn write_error_raw(&mut self, messages: PhpMixed, newline: bool, verbosity: i64) { - <Self as BaseIO>::write_error_raw(self, messages, newline, verbosity) - } - fn get_authentications( &self, ) -> indexmap::IndexMap<String, indexmap::IndexMap<String, Option<String>>> { |
