(ctx context.Context, flags *RootFlags)
| 266 | } |
| 267 | |
| 268 | func (c *AdminGroupsMembersRemoveCmd) Run(ctx context.Context, flags *RootFlags) error { |
| 269 | groupEmail := strings.TrimSpace(c.GroupEmail) |
| 270 | memberEmail := strings.TrimSpace(c.MemberEmail) |
| 271 | if groupEmail == "" || memberEmail == "" { |
| 272 | return usage("group email and member email required") |
| 273 | } |
| 274 | |
| 275 | if confirmErr := dryRunAndConfirmDestructive(ctx, flags, "admin.groups.members.remove", map[string]any{ |
| 276 | "group": groupEmail, |
| 277 | "member": memberEmail, |
| 278 | }, fmt.Sprintf("remove %s from %s", memberEmail, groupEmail)); confirmErr != nil { |
| 279 | return confirmErr |
| 280 | } |
| 281 | |
| 282 | account, err := requireAdminAccount(flags) |
| 283 | if err != nil { |
| 284 | return err |
| 285 | } |
| 286 | |
| 287 | svc, err := adminDirectoryService(ctx, account) |
| 288 | if err != nil { |
| 289 | return wrapAdminDirectoryError(err, account) |
| 290 | } |
| 291 | |
| 292 | if err := svc.Members.Delete(groupEmail, memberEmail).Context(ctx).Do(); err != nil { |
| 293 | return wrapAdminDirectoryError(err, account) |
| 294 | } |
| 295 | |
| 296 | if outfmt.IsJSON(ctx) { |
| 297 | return outfmt.WriteJSON(ctx, stdoutWriter(ctx), map[string]any{ |
| 298 | "removed": true, |
| 299 | "email": memberEmail, |
| 300 | "group": groupEmail, |
| 301 | }) |
| 302 | } |
| 303 | |
| 304 | u := ui.FromContext(ctx) |
| 305 | u.Out().Linef("Removed %s from %s", memberEmail, groupEmail) |
| 306 | return nil |
| 307 | } |
nothing calls this directly
no test coverage detected