@@ -43,6 +43,13 @@ type ProjectsRes struct {
4343 Items []Project
4444}
4545
46+ type WorkspaceMembers struct {
47+ Page int
48+ Pagelen int
49+ Size int
50+ Members []User
51+ }
52+
4653func (t * Permission ) GetUserPermissions (organization , member string ) (* Permission , error ) {
4754 urlStr := t .c .requestUrl ("/workspaces/%s/permissions?q=user.nickname=\" %s\" " , organization , member )
4855 response , err := t .c .executePaginated ("GET" , urlStr , "" )
@@ -83,9 +90,14 @@ func (t *Workspace) Get(workspace string) (*Workspace, error) {
8390 return decodeWorkspace (response )
8491}
8592
86- func (w * Workspace ) Members (teamname string ) (interface {} , error ) {
93+ func (w * Workspace ) Members (teamname string ) (* WorkspaceMembers , error ) {
8794 urlStr := w .c .requestUrl ("/workspaces/%s/members" , teamname )
88- return w .c .execute ("GET" , urlStr , "" )
95+ response , err := w .c .execute ("GET" , urlStr , "" )
96+ if err != nil {
97+ return nil , err
98+ }
99+
100+ return decodeMembers (response )
89101}
90102
91103func (w * Workspace ) Projects (teamname string ) (* ProjectsRes , error ) {
@@ -217,3 +229,43 @@ func decodeProjects(projectResponse interface{}) (*ProjectsRes, error) {
217229 }
218230 return & res , nil
219231}
232+
233+ func decodeMembers (membersResponse interface {}) (* WorkspaceMembers , error ) {
234+ responseMap , ok := membersResponse .(map [string ]interface {})
235+ if ! ok {
236+ return nil , errors .New ("not a valid format" )
237+ }
238+
239+ var members []User
240+ userArray := responseMap ["values" ].([]interface {})
241+ for _ , userEntry := range userArray {
242+ userEntryMap := userEntry .(map [string ]interface {})
243+
244+ member , err := decodeUser (userEntryMap ["user" ])
245+ if err != nil {
246+ return nil , err
247+ }
248+ members = append (members , * member )
249+ }
250+
251+ page , ok := responseMap ["page" ].(int )
252+ if ! ok {
253+ page = 0
254+ }
255+ pagelen , ok := responseMap ["pagelen" ].(int )
256+ if ! ok {
257+ pagelen = 0
258+ }
259+ size , ok := responseMap ["size" ].(int )
260+ if ! ok {
261+ size = 0
262+ }
263+
264+ workspaceMembers := WorkspaceMembers {
265+ Page : page ,
266+ Pagelen : pagelen ,
267+ Size : size ,
268+ Members : members ,
269+ }
270+ return & workspaceMembers , nil
271+ }
0 commit comments