use inquire::validator::ValueRequiredValidator;
use super::validators;
use super::PromptError;
use super::SEP;
pub struct PromptUrl
{
message: String,
default: Option<String>,
}
impl PromptUrl
{
pub fn new<S>(message: S) -> Self
where
S: AsRef<str>,
{
let inner = |message: &str| {
let message = format!("{message}{SEP}");
Self {
message,
default: None,
}
};
inner(message.as_ref())
}
pub fn with_default<S>(
mut self,
default: S,
) -> Self
where
S: AsRef<str>,
{
let inner = |default: &str| {
self.default = Some(default.to_string());
self
};
inner(default.as_ref())
}
pub fn prompt(self) -> Result<String, PromptError>
{
let Self { message, default } = self;
let mut prompt = inquire::Text::new(&message);
if let Some(default) = default.as_ref()
{
prompt = prompt.with_default(default);
}
prompt = prompt.with_validator(ValueRequiredValidator::default());
prompt = prompt.with_validator(validators::url);
let response = prompt.prompt()?;
Ok(response)
}
}