alith_prompt/
concatenator.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, PartialEq, Debug, Default, Serialize, Deserialize)]
4pub enum TextConcatenator {
5    DoubleNewline,
6    #[default]
7    SingleNewline,
8    Space,
9    Comma,
10    Custom(String),
11}
12
13impl TextConcatenator {
14    pub fn as_str(&self) -> &str {
15        match self {
16            TextConcatenator::DoubleNewline => "\n\n",
17            TextConcatenator::SingleNewline => "\n",
18            TextConcatenator::Space => " ",
19            TextConcatenator::Comma => ", ",
20            TextConcatenator::Custom(custom) => custom,
21        }
22    }
23}
24
25pub trait TextConcatenatorTrait {
26    fn concatenator_mut(&mut self) -> &mut TextConcatenator;
27
28    fn clear_built(&self);
29
30    fn concate_deol(&mut self) -> &mut Self {
31        if self.concatenator_mut() != &TextConcatenator::DoubleNewline {
32            *self.concatenator_mut() = TextConcatenator::DoubleNewline;
33            self.clear_built();
34        }
35        self
36    }
37
38    fn concate_seol(&mut self) -> &mut Self {
39        if self.concatenator_mut() != &TextConcatenator::SingleNewline {
40            *self.concatenator_mut() = TextConcatenator::SingleNewline;
41            self.clear_built();
42        }
43        self
44    }
45
46    fn concate_space(&mut self) -> &mut Self {
47        if self.concatenator_mut() != &TextConcatenator::Space {
48            *self.concatenator_mut() = TextConcatenator::Space;
49            self.clear_built();
50        }
51        self
52    }
53
54    fn concate_comma(&mut self) -> &mut Self {
55        if self.concatenator_mut() != &TextConcatenator::Comma {
56            *self.concatenator_mut() = TextConcatenator::Comma;
57            self.clear_built();
58        }
59        self
60    }
61
62    fn concate_custom<T: AsRef<str>>(&mut self, custom: T) -> &mut Self {
63        if self.concatenator_mut() != &TextConcatenator::Custom(custom.as_ref().to_owned()) {
64            *self.concatenator_mut() = TextConcatenator::Custom(custom.as_ref().to_owned());
65            self.clear_built();
66        }
67        self
68    }
69}