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 = ®istry{} 59 return instance.RegisterConversions(provider) 60 }