github.com/crossplane/upjet@v1.3.0/pkg/controller/conversion/registry.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package conversion
     6  
     7  import (
     8  	"github.com/pkg/errors"
     9  
    10  	"github.com/crossplane/upjet/pkg/config"
    11  	"github.com/crossplane/upjet/pkg/config/conversion"
    12  	"github.com/crossplane/upjet/pkg/resource"
    13  )
    14  
    15  const (
    16  	errAlreadyRegistered = "conversion functions are already registered"
    17  )
    18  
    19  var instance *registry
    20  
    21  // registry represents the conversion hook registry for a provider.
    22  type registry struct {
    23  	provider *config.Provider
    24  }
    25  
    26  // RegisterConversions registers the API version conversions from the specified
    27  // provider configuration with this registry.
    28  func (r *registry) RegisterConversions(provider *config.Provider) error {
    29  	if r.provider != nil {
    30  		return errors.New(errAlreadyRegistered)
    31  	}
    32  	r.provider = provider
    33  	return nil
    34  }
    35  
    36  // GetConversions returns the conversion.Conversions registered in this
    37  // registry for the specified Terraformed resource.
    38  func (r *registry) GetConversions(tr resource.Terraformed) []conversion.Conversion {
    39  	t := tr.GetTerraformResourceType()
    40  	if r == nil || r.provider == nil || r.provider.Resources[t] == nil {
    41  		return nil
    42  	}
    43  	return r.provider.Resources[t].Conversions
    44  }
    45  
    46  // GetConversions returns the conversion.Conversions registered for the
    47  // specified Terraformed resource.
    48  func GetConversions(tr resource.Terraformed) []conversion.Conversion {
    49  	return instance.GetConversions(tr)
    50  }
    51  
    52  // RegisterConversions registers the API version conversions from the specified
    53  // provider configuration.
    54  func RegisterConversions(provider *config.Provider) error {
    55  	if instance != nil {
    56  		return errors.New(errAlreadyRegistered)
    57  	}
    58  	instance = &registry{}
    59  	return instance.RegisterConversions(provider)
    60  }