rtlibs-utils 0.1.6

rtools library: utilities
Documentation
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)
    }
}