use crate::component::{
phrase::BasicPhraseBuilder,
word::{FixedWordSetProvider, WordCapitalizer},
};
use crate::prelude::*;
use crate::probability::Probability;
use crate::scheme::{Scheme, SchemeBuilder};
use crate::word::{WordList, WordSampler};
use super::{DEFAULT_SEPARATOR, DEFAULT_WORDS};
#[derive(Builder, Clone, Debug)]
#[builder(setter(into))]
pub struct BasicConfig<P>
where
P: WordProvider,
{
pub words: usize,
pub word_provider: P,
pub separator: String,
pub capitalize_first: Probability,
pub capitalize_words: Probability,
}
impl Default for BasicConfig<WordSampler> {
fn default() -> BasicConfig<WordSampler> {
BasicConfig {
words: DEFAULT_WORDS,
word_provider: WordList::default().sampler(),
separator: DEFAULT_SEPARATOR.into(),
capitalize_first: Probability::half(),
capitalize_words: Probability::Never,
}
}
}
impl<P> ToScheme for BasicConfig<P>
where
P: WordProvider + 'static,
{
fn to_scheme(&self) -> Scheme {
SchemeBuilder::default()
.word_set_provider(Box::new(FixedWordSetProvider::new(
self.word_provider.clone(),
self.words,
)))
.word_stylers(vec![Box::new(WordCapitalizer::new(
self.capitalize_first,
self.capitalize_words,
))])
.phrase_builder(Box::new(BasicPhraseBuilder::new(self.separator.clone())))
.phrase_stylers(Vec::new())
.build()
.unwrap()
}
}