pub use crate::core::impls::{
GitignoreTemplateManager, LocalGitignoreTemplateManager, RemoteGitignoreTemplateManager,
};
use crate::{constant::help_texts, parser::Args};
#[derive(Clone, PartialEq, Debug)]
pub struct ProgramExit {
pub message: String,
pub exit_status: i32,
pub styled_message: Option<String>,
pub kind: ExitKind,
}
#[derive(Clone, PartialEq, Debug)]
pub struct QualifiedString {
pub value: String,
pub kind: StringKind,
}
impl QualifiedString {
pub fn empty(kind: StringKind) -> Self {
Self {
value: help_texts::NOTHING_TO_BE_PRINTED.to_string(),
kind,
}
}
}
#[derive(Clone, PartialEq, Debug)]
pub enum ExitKind {
VersionInfos,
HelpInfos,
AuthorInfos,
Error,
}
#[derive(Clone, PartialEq, Debug, Copy)]
pub enum StringKind {
Remote,
Local,
Mixed,
}
pub trait TemplateGenerator: TemplateLister {
fn generate(&self, template_names: &[String]) -> Result<QualifiedString, ProgramExit>;
fn generate_with_template_check(
&self,
template_names: &[String],
) -> Result<QualifiedString, ProgramExit>;
}
pub trait TemplateLister {
fn list(&self) -> Result<QualifiedString, ProgramExit>;
}
pub trait TemplateFactory<T: TemplateManager + ?Sized> {
fn from_args(args: &Args) -> Result<Box<T>, ProgramExit>;
}
pub trait TemplateManager: TemplateGenerator {}