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)
}
}