github.com/lbryio/lbcd@v0.22.119/database/ffldb/driver.go (about)

     1  // Copyright (c) 2015-2016 The btcsuite developers
     2  // Use of this source code is governed by an ISC
     3  // license that can be found in the LICENSE file.
     4  
     5  package ffldb
     6  
     7  import (
     8  	"fmt"
     9  
    10  	"github.com/btcsuite/btclog"
    11  	"github.com/lbryio/lbcd/database"
    12  	"github.com/lbryio/lbcd/wire"
    13  )
    14  
    15  var log = btclog.Disabled
    16  
    17  const (
    18  	dbType = "ffldb"
    19  )
    20  
    21  // parseArgs parses the arguments from the database Open/Create methods.
    22  func parseArgs(funcName string, args ...interface{}) (string, wire.BitcoinNet, error) {
    23  	if len(args) != 2 {
    24  		return "", 0, fmt.Errorf("invalid arguments to %s.%s -- "+
    25  			"expected database path and block network", dbType,
    26  			funcName)
    27  	}
    28  
    29  	dbPath, ok := args[0].(string)
    30  	if !ok {
    31  		return "", 0, fmt.Errorf("first argument to %s.%s is invalid -- "+
    32  			"expected database path string", dbType, funcName)
    33  	}
    34  
    35  	network, ok := args[1].(wire.BitcoinNet)
    36  	if !ok {
    37  		return "", 0, fmt.Errorf("second argument to %s.%s is invalid -- "+
    38  			"expected block network", dbType, funcName)
    39  	}
    40  
    41  	return dbPath, network, nil
    42  }
    43  
    44  // openDBDriver is the callback provided during driver registration that opens
    45  // an existing database for use.
    46  func openDBDriver(args ...interface{}) (database.DB, error) {
    47  	dbPath, network, err := parseArgs("Open", args...)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	return openDB(dbPath, network, false)
    53  }
    54  
    55  // createDBDriver is the callback provided during driver registration that
    56  // creates, initializes, and opens a database for use.
    57  func createDBDriver(args ...interface{}) (database.DB, error) {
    58  	dbPath, network, err := parseArgs("Create", args...)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  
    63  	return openDB(dbPath, network, true)
    64  }
    65  
    66  // useLogger is the callback provided during driver registration that sets the
    67  // current logger to the provided one.
    68  func useLogger(logger btclog.Logger) {
    69  	log = logger
    70  }
    71  
    72  func init() {
    73  	// Register the driver.
    74  	driver := database.Driver{
    75  		DbType:    dbType,
    76  		Create:    createDBDriver,
    77  		Open:      openDBDriver,
    78  		UseLogger: useLogger,
    79  	}
    80  	if err := database.RegisterDriver(driver); err != nil {
    81  		panic(fmt.Sprintf("Failed to regiser database driver '%s': %v",
    82  			dbType, err))
    83  	}
    84  }