@@ -67,6 +67,7 @@ trait Embeddable {
6767 fn get_title ( & self ) -> String ;
6868 fn get_description ( & self ) -> String ;
6969 fn get_colour ( & self ) -> Colour ;
70+ fn get_labels ( & self ) -> Option < String > ;
7071}
7172
7273impl Embeddable for Issue {
@@ -87,14 +88,8 @@ impl Embeddable for Issue {
8788 embed. field ( "Milestone" , & milestone. title , true ) ;
8889 }
8990
90- if !self . labels . is_empty ( ) {
91- let mut label_list = vec ! [ ] ;
92- for label in & self . labels {
93- label_list. push ( label. name . clone ( ) ) ;
94- }
95-
96- let value = format ! ( "`{}`" , label_list. join( "`, `" ) ) ;
97- embed. field ( "Labels" , value, true ) ;
91+ if let Some ( labels) = self . get_labels ( ) {
92+ embed. field ( "Labels" , labels, true ) ;
9893 }
9994
10095 embed. to_owned ( )
@@ -122,6 +117,18 @@ impl Embeddable for Issue {
122117 None => OPEN_COLOUR
123118 }
124119 }
120+
121+ fn get_labels ( & self ) -> Option < String > {
122+ if !self . labels . is_empty ( ) {
123+ let labels = & self . labels . iter ( )
124+ . map ( |l| l. name . clone ( ) )
125+ . collect :: < Vec < String > > ( ) ;
126+
127+ Some ( format ! ( "`{}`" , labels. join( "`, `" ) ) )
128+ } else {
129+ None
130+ }
131+ }
125132}
126133
127134impl Embeddable for PullRequest {
@@ -151,15 +158,8 @@ impl Embeddable for PullRequest {
151158 embed. field ( "Milestone" , & milestone. title , true ) ;
152159 }
153160
154- if let Some ( labels) = & self . labels {
155- let mut label_list = vec ! [ ] ;
156-
157- for label in labels {
158- label_list. push ( label. name . clone ( ) ) ;
159- }
160-
161- let value = format ! ( "`{}`" , label_list. join( "`, `" ) ) ;
162- embed. field ( "Labels" , value, true ) ;
161+ if let Some ( labels) = self . get_labels ( ) {
162+ embed. field ( "Labels" , labels, true ) ;
163163 }
164164
165165 embed. to_owned ( )
@@ -193,4 +193,18 @@ impl Embeddable for PullRequest {
193193 None => OPEN_COLOUR
194194 }
195195 }
196+
197+ fn get_labels ( & self ) -> Option < String > {
198+ if let Some ( labels) = & self . labels {
199+ if !labels. is_empty ( ) {
200+ let labels = labels. iter ( )
201+ . map ( |l| l. name . clone ( ) )
202+ . collect :: < Vec < String > > ( ) ;
203+
204+ return Some ( format ! ( "`{}`" , labels. join( "`, `" ) ) )
205+ }
206+ }
207+
208+ None
209+ }
196210}
0 commit comments