decred.org/dcrwallet/v3@v3.1.0/wallet/db.go (about) 1 // Copyright (c) 2018 The Decred 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 wallet 6 7 import ( 8 "io" 9 10 "decred.org/dcrwallet/v3/errors" 11 "decred.org/dcrwallet/v3/wallet/walletdb" 12 ) 13 14 // DB represents an ACID database for a wallet. 15 type DB interface { 16 io.Closer 17 18 // internal returns the internal interface, allowing DB to be used as an 19 // opaque type in other packages without revealing the walletdb.DB 20 // interface. 21 internal() walletdb.DB 22 } 23 24 type opaqueDB struct { 25 walletdb.DB 26 } 27 28 func (db opaqueDB) internal() walletdb.DB { return db.DB } 29 30 // OpenDB opens a database with some specific driver implementation. Args 31 // specify the arguments to open the database and may differ based on driver. 32 func OpenDB(driver string, args ...interface{}) (DB, error) { 33 const op errors.Op = "wallet.OpenDB" 34 db, err := walletdb.Open(driver, args...) 35 if err != nil { 36 return nil, errors.E(op, err) 37 } 38 return opaqueDB{db}, nil 39 } 40 41 // CreateDB creates a new database with some specific driver implementation. 42 // Args specify the arguments to open the database and may differ based on 43 // driver. 44 func CreateDB(driver string, args ...interface{}) (DB, error) { 45 const op errors.Op = "wallet.CreateDB" 46 db, err := walletdb.Create(driver, args...) 47 if err != nil { 48 return nil, errors.E(op, err) 49 } 50 return opaqueDB{db}, nil 51 }