github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/applicationscaler/manifold.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package applicationscaler
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"gopkg.in/juju/worker.v1"
     9  	"gopkg.in/juju/worker.v1/dependency"
    10  
    11  	"github.com/juju/juju/api/base"
    12  	"github.com/juju/juju/cmd/jujud/agent/engine"
    13  )
    14  
    15  // ManifoldConfig holds dependencies and configuration for an
    16  // applicationscaler worker.
    17  type ManifoldConfig struct {
    18  	APICallerName string
    19  	NewFacade     func(base.APICaller) (Facade, error)
    20  	NewWorker     func(Config) (worker.Worker, error)
    21  }
    22  
    23  // start is a method on ManifoldConfig because that feels a bit cleaner
    24  // than closing over config in Manifold.
    25  func (config ManifoldConfig) start(apiCaller base.APICaller) (worker.Worker, error) {
    26  	facade, err := config.NewFacade(apiCaller)
    27  	if err != nil {
    28  		return nil, errors.Trace(err)
    29  	}
    30  	return config.NewWorker(Config{
    31  		Facade: facade,
    32  	})
    33  }
    34  
    35  // Manifold returns a dependency.Manifold that runs an applicationscaler worker.
    36  func Manifold(config ManifoldConfig) dependency.Manifold {
    37  	return engine.APIManifold(
    38  		engine.APIManifoldConfig{config.APICallerName},
    39  		config.start,
    40  	)
    41  }