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}