use std::borrow::Cow; use git2::Signature; pub struct Settings { commit_name: Cow<'static, str>, commit_email: Cow<'static, str>, } impl Settings { pub fn commit_name>>(mut self, commit_name: Name) -> Self { self.commit_name = commit_name.into(); self } pub fn commit_email>>(mut self, commit_email: Email) -> Self { self.commit_email = commit_email.into(); self } pub(crate) fn signature<'s>(&'s self) -> Signature<'s> { git2::Signature::now(&self.commit_name, &self.commit_email).unwrap() } } impl Default for Settings { fn default() -> Self { Self { commit_name: Cow::Borrowed("Wikarden"), commit_email: Cow::Borrowed("wikarden@dreamy.place"), } } } #[cfg(test)] mod test { use super::Settings; #[test] pub fn makes_signature() { let settings = Settings::default(); let sig = settings.signature(); assert_eq!(sig.email().unwrap(), "wikarden@dreamy.place"); assert_eq!(sig.name().unwrap(), "Wikarden"); } }