package serviceusage import ( "context" "fmt" "time" "google.golang.org/api/option" svcusage "google.golang.org/api/serviceusage/v1" ) type Client struct { s *svcusage.Service ctx context.Context ProjectNumber string } func New(ctx context.Context, projectNumber string, opts option.ClientOption) (*Client, error) { svc, err := svcusage.NewService(ctx, opts) if err != nil { return nil, fmt.Errorf("serviceusage.New: failed to create serviceusage service. error: %w", err) } return &Client{svc, ctx, projectNumber}, nil } func (c *Client) EnableServices(svcs []string) error { req := &svcusage.BatchEnableServicesRequest{ServiceIds: svcs} op, err := c.s.Services.BatchEnable(fmt.Sprintf("projects/%s", c.ProjectNumber), req).Do() if err != nil { return wrapErr(err) } // wait for services to be enabled, or fail to enable for { if op.Done { break } op, err = c.s.Operations.Get(op.Name).Do() if err != nil { return wrapErr(err) } select { case <-c.ctx.Done(): if err := c.ctx.Err(); err != nil { return wrapErr(err) } return nil case <-time.After(5 * time.Second): continue } } return nil } func wrapErr(err error) error { return fmt.Errorf("serviceusage.EnableServices: failed to execute batch enablement operation. error: %w", err) }