1use crate::message::{Message, MessageFlags};
2
3/// A helper type to build a `Message` conveniently via method chaining.
4pub struct MessageBuilder {
5 m: Message,
6}
7
8impl Message {
9 /// Build a new singular message.
10 pub fn build_singular() -> MessageBuilder {
11 MessageBuilder {
12 m: Message {
13 is_plural: false,
14 ..Message::default()
15 },
16 }
17 }
18
19 /// Build a new plural message.
20 pub fn build_plural() -> MessageBuilder {
21 MessageBuilder {
22 m: Message {
23 is_plural: true,
24 ..Message::default()
25 },
26 }
27 }
28}
29
30impl MessageBuilder {
31 /// Set the comments field.
32 pub fn with_comments(&mut self, comments: String) -> &mut Self {
33 self.m.comments = comments;
34 self
35 }
36
37 /// Set the source field.
38 pub fn with_source(&mut self, source: String) -> &mut Self {
39 self.m.source = source;
40 self
41 }
42
43 /// Set the flags field.
44 pub fn with_flags(&mut self, flags: MessageFlags) -> &mut Self {
45 self.m.flags = flags;
46 self
47 }
48
49 /// Set the msgctxt field.
50 pub fn with_msgctxt(&mut self, msgctxt: String) -> &mut Self {
51 self.m.msgctxt = msgctxt;
52 self
53 }
54
55 /// Set the msgid field.
56 pub fn with_msgid(&mut self, msgid: String) -> &mut Self {
57 self.m.msgid = msgid;
58 self
59 }
60
61 /// Set the msgid_plural field.
62 pub fn with_msgid_plural(&mut self, msgid_plural: String) -> &mut Self {
63 self.m.msgid_plural = msgid_plural;
64 self
65 }
66
67 /// Set the msgstr field.
68 pub fn with_msgstr(&mut self, msgstr: String) -> &mut Self {
69 self.m.msgstr = msgstr;
70 self
71 }
72
73 /// Set the msgstr_plural field.
74 pub fn with_msgstr_plural(&mut self, msgstr_plural: Vec<String>) -> &mut Self {
75 self.m.msgstr_plural = msgstr_plural;
76 self
77 }
78
79 /// Finish building and get the resulting `Message` object.
80 /// This builder object should be discarded and not be re-used afterwards.
81 pub fn done(&mut self) -> Message {
82 std::mem::take(&mut self.m)
83 }
84}
85