1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
use crate::body::Body; use crate::fragment::Fragment; #[derive(Debug, PartialEq, Clone, Default)] pub struct Subject { text: String, } impl From<&str> for Subject { fn from(subject: &str) -> Self { Subject { text: subject.into(), } } } impl From<String> for Subject { fn from(subject: String) -> Self { Subject { text: subject } } } impl From<Subject> for String { fn from(subject: Subject) -> String { subject.text } } impl From<Body> for Subject { fn from(body: Body) -> Subject { Subject::from(String::from(body)) } } impl From<Vec<Fragment>> for Subject { fn from(ast: Vec<Fragment>) -> Self { ast.iter() .find_map(|values| { if let Fragment::Body(body) = values { Some(Subject::from(body.clone())) } else { None } }) .unwrap_or_default() } } #[cfg(test)] mod tests { use super::Subject; use crate::body::Body; use crate::fragment::Fragment; use crate::Comment; use pretty_assertions::assert_eq; #[test] fn it_can_be_created_from_a_str() { let subject = String::from(Subject::from("hello, world!")); assert_eq!(subject, String::from("hello, world!")) } #[test] fn it_can_be_created_from_a_string() { let subject = String::from(Subject::from(String::from("hello, world!"))); assert_eq!(subject, String::from("hello, world!")) } #[test] fn it_can_be_created_from_a_body() { let subject = Subject::from(Body::from("hello, world!")); assert_eq!(subject, Subject::from("hello, world!")) } #[test] fn it_can_be_created_from_fragments() { let subject = Subject::from(vec![Fragment::Body(Body::from("hello, world!"))]); assert_eq!(subject, Subject::from("hello, world!")) } #[test] fn it_can_be_created_from_fragments_commit_first_is_skipped() { let subject = Subject::from(vec![ Fragment::Comment(Comment::from("# Important Comment")), Fragment::Body(Body::from("hello, world!")), ]); assert_eq!(subject, Subject::from("hello, world!")) } }