func()

in pkg/cloud/service.go [85:140]


func (s *Service) wrapOperation(anyOp any) (operation, error) {
	switch o := anyOp.(type) {
	case *ga.Operation:
		r, err := ParseResourceURL(o.SelfLink)
		if err != nil {
			return nil, fmt.Errorf("wrapOperation: %w", err)
		}
		return &gaOperation{
			s:         s,
			projectID: r.ProjectID,
			key:       r.Key,
		}, nil
	case *alpha.Operation:
		r, err := ParseResourceURL(o.SelfLink)
		if err != nil {
			return nil, fmt.Errorf("wrapOperation: %w", err)
		}
		return &alphaOperation{
			s:         s,
			projectID: r.ProjectID,
			key:       r.Key,
		}, nil
	case *beta.Operation:
		r, err := ParseResourceURL(o.SelfLink)
		if err != nil {
			return nil, fmt.Errorf("wrapOperation: %w", err)
		}
		return &betaOperation{
			s: s, projectID: r.ProjectID,
			key: r.Key,
		}, nil
	case *networkservicesga.Operation:
		result, err := parseNetworkServiceOpURL(o.Name)
		if err != nil {
			return nil, fmt.Errorf("wrapOperation: %w", err)
		}
		return &networkServicesOperation{
			s:         s,
			projectID: result.projectID,
			key:       result.key,
		}, nil
	case *networkservicesbeta.Operation:
		result, err := parseNetworkServiceOpURL(o.Name)
		if err != nil {
			return nil, fmt.Errorf("wrapOperation: %w", err)
		}
		// Reuse the GA operation stream for Beta.
		return &networkServicesOperation{
			s:         s,
			projectID: result.projectID,
			key:       result.key,
		}, nil
	default:
		return nil, fmt.Errorf("invalid type %T", anyOp)
	}
}