@@ -107,6 +107,42 @@ impl Default for TeamHelper {
107
107
}
108
108
}
109
109
110
+ enum TeamHelperParam {
111
+ /// `{{team-text team name}}`
112
+ Name ,
113
+
114
+ /// `{{team-text team description}}`
115
+ Description ,
116
+
117
+ /// `{{team-text team role (lookup member.roles 0)}}`
118
+ Role ( String ) ,
119
+ }
120
+
121
+ impl TeamHelperParam {
122
+ fn fluent_id ( & self , team_name : & str ) -> String {
123
+ match self {
124
+ TeamHelperParam :: Name => format ! ( "governance-team-{team_name}-name" ) ,
125
+ TeamHelperParam :: Description => format ! ( "governance-team-{team_name}-description" ) ,
126
+ TeamHelperParam :: Role ( role_id) => format ! ( "governance-role-{role_id}" ) ,
127
+ }
128
+ }
129
+
130
+ fn english < ' a > ( & self , team : & ' a serde_json:: Value ) -> & ' a str {
131
+ match self {
132
+ TeamHelperParam :: Name => team[ "website_data" ] [ "name" ] . as_str ( ) . unwrap ( ) ,
133
+ TeamHelperParam :: Description => team[ "website_data" ] [ "description" ] . as_str ( ) . unwrap ( ) ,
134
+ TeamHelperParam :: Role ( role_id) => {
135
+ for role in team[ "roles" ] . as_array ( ) . unwrap ( ) {
136
+ if role[ "id" ] == * role_id {
137
+ return role[ "description" ] . as_str ( ) . unwrap ( ) ;
138
+ }
139
+ }
140
+ panic ! ( "no role {:?}" , role_id) ;
141
+ }
142
+ }
143
+ }
144
+ }
145
+
110
146
impl HelperDef for TeamHelper {
111
147
fn call < ' reg : ' rc , ' rc > (
112
148
& self ,
@@ -137,6 +173,25 @@ impl HelperDef for TeamHelper {
137
173
"{{team-text}} takes only identifier parameters" ,
138
174
) ) ;
139
175
} ;
176
+
177
+ let param = match id. as_str ( ) {
178
+ "name" => TeamHelperParam :: Name ,
179
+ "description" => TeamHelperParam :: Description ,
180
+ "role" => {
181
+ let Some ( role_id) = h. param ( 2 ) else {
182
+ return Err ( RenderError :: new (
183
+ "{{team-text}} requires a third parameter for the role id" ,
184
+ ) ) ;
185
+ } ;
186
+ TeamHelperParam :: Role ( role_id. value ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) )
187
+ }
188
+ unrecognized => {
189
+ return Err ( RenderError :: new ( format ! (
190
+ "unrecognized {{{{team-text}}}} param {unrecognized:?}" ,
191
+ ) ) ) ;
192
+ }
193
+ } ;
194
+
140
195
let team = rcx
141
196
. evaluate ( context, name)
142
197
. map_err ( |e| RenderError :: from_error ( & format ! ( "Cannot find team {}" , name) , e) ) ?;
@@ -148,22 +203,20 @@ impl HelperDef for TeamHelper {
148
203
. expect ( "Language must be string" ) ;
149
204
let team_name = team. as_json ( ) [ "name" ] . as_str ( ) . unwrap ( ) ;
150
205
151
- let fluent_id = format ! ( "governance-team-{}-{}" , team_name, id) ;
152
-
153
206
// English uses the team data directly, so that it gets autoupdated
154
207
if lang == "en-US" {
155
- let english = team. as_json ( ) [ "website_data" ] [ id ] . as_str ( ) . unwrap ( ) ;
208
+ let english = param . english ( team. as_json ( ) ) ;
156
209
out. write ( english)
157
210
. map_err ( |e| RenderError :: from_error ( "failed to render English team data" , e) ) ?;
158
211
} else if let Some ( value) = self . i18n . lookup_no_default_fallback (
159
212
& lang. parse ( ) . expect ( "language must be valid" ) ,
160
- & fluent_id,
213
+ & param . fluent_id ( team_name ) ,
161
214
None ,
162
215
) {
163
216
out. write ( & value)
164
217
. map_err ( |e| RenderError :: from_error ( "failed to render translated team data" , e) ) ?;
165
218
} else {
166
- let english = team. as_json ( ) [ "website_data" ] [ id ] . as_str ( ) . unwrap ( ) ;
219
+ let english = param . english ( team. as_json ( ) ) ;
167
220
out. write ( english)
168
221
. map_err ( |e| RenderError :: from_error ( "failed to render" , e) ) ?;
169
222
}
0 commit comments