func()

in pkg/cloud/api/mutable_resource.go [234:312]


func (u *mutableResource[GA, Alpha, Beta]) postAccess(srcVer meta.Version, flags int) error {
	type convert struct {
		dest       reflect.Value
		copyHelper func() error
		errors     *conversionErrors
	}

	var src reflect.Value
	var conversions []convert

	switch srcVer {
	case meta.VersionGA:
		src = reflect.ValueOf(&u.ga)
		if !isPlaceholderType(u.alpha) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.alpha),
				copyHelper: func() error { return u.typeTrait.CopyHelperGAtoAlpha(&u.alpha, &u.ga) },
				errors:     &u.errors[GAToAlphaConversion],
			})
		}
		if !isPlaceholderType(u.beta) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.beta),
				copyHelper: func() error { return u.typeTrait.CopyHelperGAtoBeta(&u.beta, &u.ga) },
				errors:     &u.errors[GAToBetaConversion],
			})
		}
	case meta.VersionAlpha:
		src = reflect.ValueOf(&u.alpha)
		if !isPlaceholderType(u.ga) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.ga),
				copyHelper: func() error { return u.typeTrait.CopyHelperAlphaToGA(&u.ga, &u.alpha) },
				errors:     &u.errors[AlphaToGAConversion],
			})
		}
		if !isPlaceholderType(u.beta) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.beta),
				copyHelper: func() error { return u.typeTrait.CopyHelperAlphaToBeta(&u.beta, &u.alpha) },
				errors:     &u.errors[AlphaToBetaConversion],
			})
		}
	case meta.VersionBeta:
		src = reflect.ValueOf(&u.beta)
		if !isPlaceholderType(u.ga) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.ga),
				copyHelper: func() error { return u.typeTrait.CopyHelperBetaToGA(&u.ga, &u.beta) },
				errors:     &u.errors[BetaToGAConversion],
			})
		}
		if !isPlaceholderType(u.alpha) {
			conversions = append(conversions, convert{
				dest:       reflect.ValueOf(&u.alpha),
				copyHelper: func() error { return u.typeTrait.CopyHelperBetaToAlpha(&u.alpha, &u.beta) },
				errors:     &u.errors[BetaToAlphaConversion],
			})
		}
	}

	if flags&postAccessSkipValidation == 0 {
		if err := checkPostAccess(u.typeTrait.FieldTraits(srcVer), src); err != nil {
			return err
		}
	}
	for _, conv := range conversions {
		c := newCopier(u.copierOptions...)
		if err := c.do(conv.dest, src); err != nil {
			return err
		}
		if err := conv.copyHelper(); err != nil {
			return err
		}
		conv.errors.missingFields = c.missing
	}

	return nil
}