package services import ( "context" "edge-infra.dev/pkg/edge/api/services/gcp" "edge-infra.dev/pkg/edge/api/types" "edge-infra.dev/pkg/lib/gcp/pubsub" secretMgrApi "edge-infra.dev/pkg/lib/gcp/secretmanager" ) //go:generate mockgen -destination=../mocks/mock_gcp_client_service.go -package=mocks edge-infra.dev/pkg/edge/api/services GcpClientService type GcpClientService interface { GetComputeClient(ctx context.Context, projectID string) (types.ComputeService, error) GetContainerClient(ctx context.Context, projectID string) (types.ContainerService, error) GetSecretClient(ctx context.Context, projectID string) (types.SecretManagerService, error) GetPubSubClient(ctx context.Context, projectID string) (types.PubSubService, error) } type gcpClientService struct { PubSubClientMap map[string]types.PubSubService } func (s *gcpClientService) GetComputeClient(ctx context.Context, projectID string) (types.ComputeService, error) { return gcp.NewCompute(ctx, projectID) } func (s *gcpClientService) GetContainerClient(ctx context.Context, projectID string) (types.ContainerService, error) { return gcp.NewContainer(ctx, projectID) } func (s *gcpClientService) GetSecretClient(ctx context.Context, projectID string) (types.SecretManagerService, error) { return secretMgrApi.NewWithOptions(ctx, projectID) } func (s *gcpClientService) GetPubSubClient(ctx context.Context, projectID string) (types.PubSubService, error) { if pubSubService := s.PubSubClientMap[projectID]; pubSubService != nil { return pubSubService, nil } pubSubService, err := pubsub.NewWithOptions(ctx, projectID) if err == nil { s.PubSubClientMap[projectID] = pubSubService } return pubSubService, err } func NewGcpClientService() *gcpClientService { //nolint stupid return &gcpClientService{ PubSubClientMap: map[string]types.PubSubService{}, } }