github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/modelgeneration/register.go (about)

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelgeneration
     5  
     6  import (
     7  	"reflect"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/apiserver/facade"
    12  )
    13  
    14  // Register is called to expose a package of facades onto a given registry.
    15  func Register(registry facade.FacadeRegistry) {
    16  	registry.MustRegister("ModelGeneration", 4, func(ctx facade.Context) (facade.Facade, error) {
    17  		return newModelGenerationFacadeV4(ctx)
    18  	}, reflect.TypeOf((*API)(nil)))
    19  }
    20  
    21  // newModelGenerationFacadeV4 provides the signature required for facade registration.
    22  func newModelGenerationFacadeV4(ctx facade.Context) (*API, error) {
    23  	authorizer := ctx.Auth()
    24  	st := &stateShim{State: ctx.State()}
    25  	m, err := st.Model()
    26  	if err != nil {
    27  		return nil, errors.Trace(err)
    28  	}
    29  	mc, err := ctx.Controller().Model(st.ModelUUID())
    30  	if err != nil {
    31  		return nil, errors.Trace(err)
    32  	}
    33  	return NewModelGenerationAPI(st, authorizer, m, &modelCacheShim{Model: mc})
    34  }