use std::path::PathBuf;
use std::str::FromStr;
use inquire::validator::Validation;
type ValidationError = Box<dyn std::error::Error + Send + Sync>;
pub(crate) fn url(v: &str) -> Result<Validation, ValidationError>
{
match validators::url::Url::parse(v)
{
Ok(_) => Ok(Validation::Valid),
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(_) => Ok(Validation::Valid),
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path_existing(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(path) =>
{
if path.exists()
{
Ok(Validation::Valid)
}
else
{
Ok(Validation::Invalid("Path does not exist".into()))
}
}
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path_existing_dir(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(path) =>
{
if path.exists() && path.is_dir()
{
Ok(Validation::Valid)
}
else
{
Ok(Validation::Invalid("Path is not a directory".into()))
}
}
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path_existing_file(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(path) =>
{
if path.exists() && path.is_file()
{
Ok(Validation::Valid)
}
else
{
Ok(Validation::Invalid("Path is not a file".into()))
}
}
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path_creating_dir(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(path) => match std::fs::create_dir_all(&path)
{
Ok(_) => Ok(Validation::Valid),
Err(_) => Ok(Validation::Invalid("Cannot create directory".into())),
},
Err(e) => Ok(Validation::Invalid(e.into())),
}
}
pub(crate) fn path_creating_file(v: &str) -> Result<Validation, ValidationError>
{
match PathBuf::from_str(v)
{
Ok(path) => match std::fs::write(
&path, "",
)
{
Ok(_) => Ok(Validation::Valid),
Err(_) => Ok(Validation::Invalid("Cannot create file".into())),
},
Err(e) => Ok(Validation::Invalid(e.into())),
}
}