rtlibs-utils 0.1.6

rtools library: utilities
Documentation
use inquire::validator::ValueRequiredValidator;

use super::PromptError;
use super::SEP;

pub struct PromptText
{
    message: String,
    default: Option<String>,
    non_empty: bool,
}

impl PromptText
{
    pub fn new<S>(message: S) -> Self
    where
        S: AsRef<str>,
    {
        let inner = |message: &str| {
            let message = format!("{message}{SEP}");
            Self {
                message,
                default: None,
                non_empty: false,
            }
        };

        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 non_empty(mut self) -> Self
    {
        self.non_empty = true;
        self
    }

    pub fn prompt(self) -> Result<String, PromptError>
    {
        let Self {
            message,
            default,
            non_empty,
        } = self;

        let mut prompt = inquire::Text::new(&message);

        if let Some(default) = default.as_ref()
        {
            prompt = prompt.with_default(default);
        }

        if non_empty
        {
            prompt = prompt.with_validator(ValueRequiredValidator::default());
        }

        let response = prompt.prompt()?;

        Ok(response)
    }
}