github.com/decred/dcrlnd@v0.7.6/lnrpc/autopilotrpc/driver.go (about)

     1  //go:build !no_autopilotrpc
     2  // +build !no_autopilotrpc
     3  
     4  package autopilotrpc
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/decred/dcrlnd/lnrpc"
    10  )
    11  
    12  // createNewSubServer is a helper method that will create the new sub server
    13  // given the main config dispatcher method. If we're unable to find the config
    14  // that is meant for us in the config dispatcher, then we'll exit with an
    15  // error.
    16  func createNewSubServer(configRegistry lnrpc.SubServerConfigDispatcher) (
    17  	*Server, lnrpc.MacaroonPerms, error) {
    18  
    19  	// We'll attempt to look up the config that we expect, according to our
    20  	// subServerName name. If we can't find this, then we'll exit with an
    21  	// error, as we're unable to properly initialize ourselves without this
    22  	// config.
    23  	subServerConf, ok := configRegistry.FetchConfig(subServerName)
    24  	if !ok {
    25  		return nil, nil, fmt.Errorf("unable to find config for "+
    26  			"subserver type %s", subServerName)
    27  	}
    28  
    29  	// Now that we've found an object mapping to our service name, we'll
    30  	// ensure that it's the type we need.
    31  	config, ok := subServerConf.(*Config)
    32  	if !ok {
    33  		return nil, nil, fmt.Errorf("wrong type of config for "+
    34  			"subserver %s, expected %T got %T", subServerName,
    35  			&Config{}, subServerConf)
    36  	}
    37  
    38  	// Before we try to make the new service instance, we'll perform
    39  	// some sanity checks on the arguments to ensure that they're useable.
    40  	switch {
    41  	case config.Manager == nil:
    42  		return nil, nil, fmt.Errorf("Manager must be set to create " +
    43  			"Autopilotrpc")
    44  	}
    45  
    46  	return New(config)
    47  }
    48  
    49  func init() {
    50  	subServer := &lnrpc.SubServerDriver{
    51  		SubServerName: subServerName,
    52  		NewGrpcHandler: func() lnrpc.GrpcHandler {
    53  			return &ServerShell{}
    54  		},
    55  	}
    56  
    57  	// If the build tag is active, then we'll register ourselves as a
    58  	// sub-RPC server within the global lnrpc package namespace.
    59  	if err := lnrpc.RegisterSubServer(subServer); err != nil {
    60  		panic(fmt.Sprintf("failed to register sub server driver "+
    61  			"'%s': %v", subServerName, err))
    62  	}
    63  }