github.com/btcsuite/btcd@v0.24.0/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/btcd/database" 11 "github.com/btcsuite/btcd/wire" 12 "github.com/btcsuite/btclog" 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 }