func()

in pkg/cloud/rgraph/rnode/generic_funcs.go [225:292]


func (f *UpdateFuncs[GA, Alpha, Beta]) Do(
	ctx context.Context,
	fingerprint string,
	id *cloud.ResourceID,
	desired api.Resource[GA, Alpha, Beta],
) error {
	// TODO: Context logging
	// TODO: span
	switch desired.Version() {
	case meta.VersionGA:
		raw, err := desired.ToGA()
		if err != nil {
			return err
		}
		if f.Options&UpdateFuncsNoFingerprint == 0 {
			// TODO: we need to make sure this is the right way to do this as it
			// modifies the Resource. Patch fingerprint for the update.
			if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
				return err
			} else {
				fv.Set(reflect.ValueOf(fingerprint))
			}
		}
		err = f.GA.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
		if err != nil {
			return err
		}
		return nil

	case meta.VersionAlpha:
		raw, err := desired.ToAlpha()
		if err != nil {
			return err
		}
		if f.Options&UpdateFuncsNoFingerprint == 0 {
			if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
				return err
			} else {
				fv.Set(reflect.ValueOf(fingerprint))
			}
		}
		err = f.Alpha.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
		if err != nil {
			return err
		}
		return nil

	case meta.VersionBeta:
		raw, err := desired.ToBeta()
		if err != nil {
			return err
		}
		if f.Options&UpdateFuncsNoFingerprint == 0 {
			if fv, err := fingerprintField(reflect.ValueOf(raw)); err != nil {
				return err
			} else {
				fv.Set(reflect.ValueOf(fingerprint))
			}
		}
		err = f.Beta.Do(ctx, id.Key, raw, cloud.ForceProjectID(id.ProjectID))
		if err != nil {
			return err
		}
		return nil
	}

	return fmt.Errorf("updateFuncs.do unsupported version %q", desired.Version())
}