text_to_sounds/serializer.rs
1use crate::sound::Sound;
2
3/// Serialize sounds to text
4///
5/// ## Example
6///
7/// ```rust
8/// use text_to_sounds::{serialize, SoundKind, Sound};
9///
10/// let sounds = vec![
11/// Sound::new(SoundKind::Th, String::from("Th")),
12/// Sound::new(SoundKind::Undefined, String::from("e")),
13/// Sound::new(SoundKind::Undefined, String::from(" ")),
14/// Sound::new(SoundKind::Ptk, String::from("t")),
15/// Sound::new(SoundKind::Undefined, String::from("e")),
16/// Sound::new(SoundKind::Undefined, String::from("x")),
17/// Sound::new(SoundKind::Ptk, String::from("t")),
18/// Sound::new(SoundKind::Undefined, String::from(" ")),
19/// Sound::new(SoundKind::Dj, String::from("j")),
20/// Sound::new(SoundKind::Undefined, String::from("u")),
21/// Sound::new(SoundKind::Undefined, String::from("s")),
22/// Sound::new(SoundKind::Ptk, String::from("t")),
23/// Sound::new(SoundKind::Undefined, String::from(" ")),
24/// Sound::new(SoundKind::Undefined, String::from("i")),
25/// Sound::new(SoundKind::Undefined, String::from("n")),
26/// Sound::new(SoundKind::Undefined, String::from(" ")),
27/// Sound::new(SoundKind::Ptk, String::from("c")),
28/// Sound::new(SoundKind::Undefined, String::from("a")),
29/// Sound::new(SoundKind::Undefined, String::from("s")),
30/// Sound::new(SoundKind::Undefined, String::from("e")),
31/// ];
32///
33/// assert_eq!(serialize(sounds), "The text just in case");
34/// ```
35pub fn serialize(sounds: Vec<Sound>) -> String {
36 if sounds.is_empty() {
37 return String::from("");
38 }
39
40 sounds
41 .iter()
42 .fold(String::new(), |string, sound| string + sound.text())
43}
44
45#[cfg(test)]
46mod serialize {
47 use super::{serialize, Sound};
48 use crate::sound::SoundKind;
49
50 #[test]
51 fn it_should_serialize_empty() {
52 assert_eq!(serialize(Vec::new()), String::from(""));
53 }
54
55 #[test]
56 fn it_should_serialize_sounds() {
57 let sounds = vec![
58 Sound::new(SoundKind::Th, String::from("Th")),
59 Sound::new(SoundKind::Undefined, String::from("e")),
60 Sound::new(SoundKind::Undefined, String::from("n")),
61 Sound::new(SoundKind::Undefined, String::from(" ")),
62 Sound::new(SoundKind::Ptk, String::from("P")),
63 Sound::new(SoundKind::Undefined, String::from("u")),
64 Sound::new(SoundKind::Ptk, String::from("T")),
65 Sound::new(SoundKind::Undefined, String::from(" ")),
66 Sound::new(SoundKind::Ptk, String::from("t")),
67 Sound::new(SoundKind::Undefined, String::from("O")),
68 Sound::new(SoundKind::Undefined, String::from("g")),
69 Sound::new(SoundKind::Undefined, String::from("E")),
70 Sound::new(SoundKind::Th, String::from("TH")),
71 Sound::new(SoundKind::Undefined, String::from("e")),
72 Sound::new(SoundKind::Undefined, String::from("r")),
73 ];
74
75 assert_eq!(serialize(sounds), "Then PuT tOgETHer");
76 }
77}