decred.org/dcrwallet/v3@v3.1.0/wallet/internal/bdb/driver.go (about) 1 // Copyright (c) 2014 The btcsuite developers 2 // Copyright (c) 2015 The Decred developers 3 // Use of this source code is governed by an ISC 4 // license that can be found in the LICENSE file. 5 6 package bdb 7 8 import ( 9 "fmt" 10 11 "decred.org/dcrwallet/v3/errors" 12 "decred.org/dcrwallet/v3/wallet/walletdb" 13 ) 14 15 const ( 16 dbType = "bdb" 17 ) 18 19 // parseArgs parses the arguments from the walletdb Open/Create methods. 20 func parseArgs(funcName string, args ...interface{}) (string, error) { 21 if len(args) != 1 { 22 return "", errors.Errorf("invalid arguments to %s.%s -- "+ 23 "expected database path", dbType, funcName) 24 } 25 26 dbPath, ok := args[0].(string) 27 if !ok { 28 return "", errors.Errorf("first argument to %s.%s is invalid -- "+ 29 "expected database path string", dbType, funcName) 30 } 31 32 return dbPath, nil 33 } 34 35 // openDBDriver is the callback provided during driver registration that opens 36 // an existing database for use. 37 func openDBDriver(args ...interface{}) (walletdb.DB, error) { 38 dbPath, err := parseArgs("Open", args...) 39 if err != nil { 40 return nil, err 41 } 42 43 return openDB(dbPath, false) 44 } 45 46 // createDBDriver is the callback provided during driver registration that 47 // creates, initializes, and opens a database for use. 48 func createDBDriver(args ...interface{}) (walletdb.DB, error) { 49 dbPath, err := parseArgs("Create", args...) 50 if err != nil { 51 return nil, err 52 } 53 54 return openDB(dbPath, true) 55 } 56 57 func init() { 58 // Register the driver. 59 driver := walletdb.Driver{ 60 DbType: dbType, 61 Create: createDBDriver, 62 Open: openDBDriver, 63 } 64 if err := walletdb.RegisterDriver(driver); err != nil { 65 panic(fmt.Sprintf("Failed to register database driver '%s': %v", 66 dbType, err)) 67 } 68 }