aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/io
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/io')
-rw-r--r--crates/shirabe/src/io/base_io.rs42
-rw-r--r--crates/shirabe/src/io/console_io.rs47
-rw-r--r--crates/shirabe/src/io/io_interface.rs72
-rw-r--r--crates/shirabe/src/io/null_io.rs37
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>>> {