@@ -6,6 +6,42 @@ const TYPE_MRKDWN: &str = "mrkdwn";
66/// [Text object](https://api.slack.com/reference/block-kit/composition-objects#text)
77/// representation.
88///
9+ /// # Example
10+ ///
11+ /// ## type plain_text
12+ ///
13+ /// ```
14+ /// use slack_messaging::blocks::elements::Text;
15+ /// use serde_json::json;
16+ ///
17+ /// let text = Text::plain("Hello, World!");
18+ /// let text_json = serde_json::to_value(text).unwrap();
19+ ///
20+ /// let expected = json!({
21+ /// "type": "plain_text",
22+ /// "text": "Hello, World!",
23+ /// "emoji": true
24+ /// });
25+ ///
26+ /// assert_eq!(text_json, expected);
27+ /// ```
28+ ///
29+ /// ## type mrkdwn
30+ ///
31+ /// ```
32+ /// use slack_messaging::blocks::elements::Text;
33+ /// use serde_json::json;
34+ ///
35+ /// let text = Text::mrkdwn("Hello, World!");
36+ /// let text_json = serde_json::to_value(text).unwrap();
37+ ///
38+ /// let expected = json!({
39+ /// "type": "mrkdwn",
40+ /// "text": "Hello, World!",
41+ /// });
42+ ///
43+ /// assert_eq!(text_json, expected);
44+ /// ```
945#[ derive( Debug , Clone , Serialize ) ]
1046pub struct Text {
1147 #[ serde( rename = "type" ) ]
@@ -149,3 +185,65 @@ impl Text {
149185 }
150186 }
151187}
188+
189+ impl PartialEq for Text {
190+ fn eq ( & self , other : & Self ) -> bool {
191+ if self . kind != other. kind || self . text . as_str ( ) != other. text . as_str ( ) {
192+ return false ;
193+ }
194+
195+ match self . kind {
196+ TYPE_PLAIN => self . emoji . unwrap_or ( false ) == other. emoji . unwrap_or ( false ) ,
197+ TYPE_MRKDWN => self . verbatim . unwrap_or ( false ) == other. verbatim . unwrap_or ( false ) ,
198+ _ => false ,
199+ }
200+ }
201+ }
202+
203+ #[ cfg( test) ]
204+ mod tests {
205+ use super :: * ;
206+
207+ #[ test]
208+ fn it_equals_with_same_type_and_text ( ) {
209+ let plain_0 = Text :: plain ( "Hello" ) ;
210+ let plain_1 = Text :: plain ( "Hello" ) ;
211+
212+ let mrkdwn_0 = Text :: mrkdwn ( "Hello" ) ;
213+ let mrkdwn_1 = Text :: mrkdwn ( "Hello" ) ;
214+
215+ assert_eq ! ( plain_0, plain_1) ;
216+ assert_eq ! ( mrkdwn_0, mrkdwn_1) ;
217+
218+ assert_ne ! ( plain_0, mrkdwn_0) ;
219+ assert_ne ! ( plain_0, mrkdwn_1) ;
220+ assert_ne ! ( plain_1, mrkdwn_0) ;
221+ assert_ne ! ( plain_1, mrkdwn_1) ;
222+ }
223+
224+ #[ test]
225+ fn it_compares_emoji_field_when_plain_text ( ) {
226+ let plain_0 = Text :: plain ( "Hello" ) . set_emoji ( false ) ;
227+ let plain_1 = Text :: plain ( "Hello" ) ;
228+
229+ assert_ne ! ( plain_0, plain_1) ;
230+
231+ let plain_0 = Text :: plain ( "Hello" ) . set_emoji ( false ) ;
232+ let plain_1 = Text :: plain ( "Hello" ) . set_emoji ( false ) ;
233+
234+ assert_eq ! ( plain_0, plain_1) ;
235+ }
236+
237+ #[ test]
238+ fn it_compares_verbatim_field_when_mrkdwn ( ) {
239+ let mrkdwn_0 = Text :: mrkdwn ( "Hello" ) . set_verbatim ( true ) ;
240+ let mrkdwn_1 = Text :: mrkdwn ( "Hello" ) ;
241+
242+ assert_ne ! ( mrkdwn_0, mrkdwn_1) ;
243+
244+ let mrkdwn_0 = Text :: mrkdwn ( "Hello" ) . set_verbatim ( true ) ;
245+ let mrkdwn_1 = Text :: mrkdwn ( "Hello" ) . set_verbatim ( true ) ;
246+
247+ assert_eq ! ( mrkdwn_0, mrkdwn_1) ;
248+ }
249+ }
0 commit comments