@@ -183,6 +183,24 @@ type DeploymentVariable struct {
183183 Secured bool
184184}
185185
186+ type DefaultReviewer struct {
187+ Nickname string
188+ DisplayName string `mapstructure:"display_name"`
189+ Type string
190+ Uuid string
191+ AccountId string `mapstructure:"account_id"`
192+ Links map [string ]map [string ]string
193+ }
194+
195+ type DefaultReviewers struct {
196+ Page int
197+ Pagelen int
198+ MaxDepth int
199+ Size int
200+ Next string
201+ DefaultReviewers []DefaultReviewer
202+ }
203+
186204func (r * Repository ) Create (ro * RepositoryOptions ) (* Repository , error ) {
187205 data := r .buildRepositoryBody (ro )
188206 urlStr := r .c .requestUrl ("/repositories/%s/%s" , ro .Owner , ro .RepoSlug )
@@ -405,9 +423,37 @@ func (r *Repository) ListForks(ro *RepositoryOptions) (interface{}, error) {
405423 return r .c .execute ("GET" , urlStr , "" )
406424}
407425
408- func (r * Repository ) ListDefaultReviewers (ro * RepositoryOptions ) (interface {} , error ) {
426+ func (r * Repository ) ListDefaultReviewers (ro * RepositoryOptions ) (* DefaultReviewers , error ) {
409427 urlStr := r .c .requestUrl ("/repositories/%s/%s/default-reviewers?pagelen=1" , ro .Owner , ro .RepoSlug )
410- return r .c .execute ("GET" , urlStr , "" )
428+
429+ res , err := r .c .execute ("GET" , urlStr , "" )
430+ if err != nil {
431+ return nil , err
432+ }
433+ return decodeDefaultReviewers (res )
434+ }
435+
436+ func (r * Repository ) GetDefaultReviewer (rdro * RepositoryDefaultReviewerOptions ) (* DefaultReviewer , error ) {
437+ urlStr := r .c .requestUrl ("/repositories/%s/%s/default-reviewers/%s" , rdro .Owner , rdro .RepoSlug , rdro .Username )
438+ res , err := r .c .execute ("GET" , urlStr , "" )
439+ if err != nil {
440+ return nil , fmt .Errorf ("unable to get default reviewer: %w" , err )
441+ }
442+ return decodeDefaultReviewer (res )
443+ }
444+
445+ func (r * Repository ) AddDefaultReviewer (rdro * RepositoryDefaultReviewerOptions ) (* DefaultReviewer , error ) {
446+ urlStr := r .c .requestUrl ("/repositories/%s/%s/default-reviewers/%s" , rdro .Owner , rdro .RepoSlug , rdro .Username )
447+ res , err := r .c .execute ("PUT" , urlStr , "" )
448+ if err != nil {
449+ return nil , err
450+ }
451+ return decodeDefaultReviewer (res )
452+ }
453+
454+ func (r * Repository ) DeleteDefaultReviewer (rdro * RepositoryDefaultReviewerOptions ) (interface {}, error ) {
455+ urlStr := r .c .requestUrl ("/repositories/%s/%s/default-reviewers/%s" , rdro .Owner , rdro .RepoSlug , rdro .Username )
456+ return r .c .execute ("DELETE" , urlStr , "" )
411457}
412458
413459func (r * Repository ) UpdatePipelineConfig (rpo * RepositoryPipelineOptions ) (* Pipeline , error ) {
@@ -1262,3 +1308,58 @@ func (rf RepositoryFile) String() string {
12621308func (rb RepositoryBlob ) String () string {
12631309 return string (rb .Content )
12641310}
1311+
1312+ func decodeDefaultReviewer (response interface {}) (* DefaultReviewer , error ) {
1313+ var defaultReviewerVariable DefaultReviewer
1314+ err := mapstructure .Decode (response , & defaultReviewerVariable )
1315+ if err != nil {
1316+ return nil , err
1317+ }
1318+ return & defaultReviewerVariable , nil
1319+ }
1320+
1321+ func decodeDefaultReviewers (response interface {}) (* DefaultReviewers , error ) {
1322+ responseMap := response .(map [string ]interface {})
1323+ values := responseMap ["values" ].([]interface {})
1324+ var variables []DefaultReviewer
1325+ for _ , variable := range values {
1326+ var defaultReviewerVariable DefaultReviewer
1327+ err := mapstructure .Decode (variable , & defaultReviewerVariable )
1328+ if err == nil {
1329+ variables = append (variables , defaultReviewerVariable )
1330+ }
1331+ }
1332+
1333+ page , ok := responseMap ["page" ].(float64 )
1334+ if ! ok {
1335+ page = 0
1336+ }
1337+
1338+ pagelen , ok := responseMap ["pagelen" ].(float64 )
1339+ if ! ok {
1340+ pagelen = 0
1341+ }
1342+ max_depth , ok := responseMap ["max_depth" ].(float64 )
1343+ if ! ok {
1344+ max_depth = 0
1345+ }
1346+ size , ok := responseMap ["size" ].(float64 )
1347+ if ! ok {
1348+ size = 0
1349+ }
1350+
1351+ next , ok := responseMap ["next" ].(string )
1352+ if ! ok {
1353+ next = ""
1354+ }
1355+
1356+ defaultReviewerVariables := DefaultReviewers {
1357+ Page : int (page ),
1358+ Pagelen : int (pagelen ),
1359+ MaxDepth : int (max_depth ),
1360+ Size : int (size ),
1361+ Next : next ,
1362+ DefaultReviewers : variables ,
1363+ }
1364+ return & defaultReviewerVariables , nil
1365+ }
0 commit comments