alith_prompt/
concatenator.rs1use 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}