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  }