github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/servicescaler/manifold.go (about)

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