stow

package module
v2.1.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2016 License: MIT Imports: 10 Imported by: 0

README

Stow

GoDoc Release Software License Build Status Coverage Status Go Report Card

Usage

This package provides a persistence manager for objects backed by boltdb.

package main

import (
  "encoding/gob"
  "fmt"
  "log"

  "github.com/boltdb/bolt"
  "gopkg.in/djherbis/stow.v2"
)

func main() {
  // Create a boltdb database
  db, err := bolt.Open("my.db", 0600, nil)
  if err != nil {
    log.Fatal(err)
  }

  // Open/Create a Json-encoded Store, Xml and Gob are also built-in
  // We'll we store a greeting and person in a boltdb bucket named "people"
  peopleStore := stow.NewJSONStore(db, []byte("people"))

  peopleStore.Put("hello", Person{Name: "Dustin"})

  peopleStore.ForEach(func(greeting string, person Person) {
    fmt.Println(greeting, person.Name)
  })

  // Open/Create a Gob-encoded Store. The Gob encoding keeps type information,
  // so you can encode/decode interfaces!
  sayerStore := stow.NewStore(db, []byte("greetings"))

  var sayer Sayer = Person{Name: "Dustin"}
  sayerStore.Put("hello", &sayer)

  var retSayer Sayer
  sayerStore.Get("hello", &retSayer)
  retSayer.Say("hello")

  sayerStore.ForEach(func(sayer Sayer) {
    sayer.Say("hey")
  })
}

type Sayer interface {
  Say(something string)
}

type Person struct {
  Name string
}

func (p Person) Say(greeting string) {
  fmt.Printf("%s says %s.\n", p.Name, greeting)
}

func init() {
  gob.Register(&Person{})
}

Installation

go get gopkg.in/djherbis/stow.v2

Documentation

Overview

Package stow is used to persist objects to a bolt.DB database.

Index

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("not found")

ErrNotFound indicates object is not in database.

Functions

func Register

func Register(value interface{})

Register registers the type using gob.Register for use with NewStore() and the GobCodec.

func RegisterName

func RegisterName(name string, value interface{})

RegisterName registers the type using gob.RegisterName for use with NewStore() and the GobCodec.

Types

type Codec

type Codec interface {
	NewEncoder(io.Writer) Encoder
	NewDecoder(io.Reader) Decoder
}

Codec provides a mechanism for storing/retriving objects as streams of data.

type Decoder

type Decoder interface {
	Decode(interface{}) error
}

Decoder is used to decode objects

type Encoder

type Encoder interface {
	Encode(interface{}) error
}

Encoder is used to encode objects

type GobCodec

type GobCodec struct{}

GobCodec is used to encode/decode using the Gob format.

func (GobCodec) NewDecoder

func (c GobCodec) NewDecoder(r io.Reader) Decoder

NewDecoder returns a new gob decoder which reads from r

func (GobCodec) NewEncoder

func (c GobCodec) NewEncoder(w io.Writer) Encoder

NewEncoder returns a new gob encoder which writes to w

type JSONCodec

type JSONCodec struct{}

JSONCodec is used to encode/decode JSON

func (JSONCodec) NewDecoder

func (c JSONCodec) NewDecoder(r io.Reader) Decoder

NewDecoder returns a new json decoder which reads from r

func (JSONCodec) NewEncoder

func (c JSONCodec) NewEncoder(w io.Writer) Encoder

NewEncoder returns a new json encoder which writes to w

type Store

type Store struct {
	// contains filtered or unexported fields
}

Store manages objects persistence.

func NewCustomStore

func NewCustomStore(db *bolt.DB, bucket []byte, codec Codec) *Store

NewCustomStore allows you to create a store with a custom underlying Encoding

func NewJSONStore

func NewJSONStore(db *bolt.DB, bucket []byte) *Store

NewJSONStore creates a new Store, using the underlying bolt.DB "bucket" to persist objects as json.

func NewStore

func NewStore(db *bolt.DB, bucket []byte) *Store

NewStore creates a new Store, using the underlying bolt.DB "bucket" to persist objects. NewStore uses GobEncoding, your objects must be registered via gob.Register() for this encoding to work.

func NewXMLStore

func NewXMLStore(db *bolt.DB, bucket []byte) *Store

NewXMLStore creates a new Store, using the underlying bolt.DB "bucket" to persist objects as xml.

func (*Store) Delete

func (s *Store) Delete(key interface{}) error

Delete will remove the item with the specified key from the store. It returns nil if the item was not found (like BoltDB).

func (*Store) DeleteAll

func (s *Store) DeleteAll() error

DeleteAll empties the store

func (*Store) ForEach

func (s *Store) ForEach(do interface{}) error

ForEach will run do on each object in the store. do can be a function which takes either: 1 param which will take on each "value" or 2 params where the first param is the "key" and the second is the "value".

func (*Store) Get

func (s *Store) Get(key interface{}, b interface{}) error

Get will retrieve b with key "key". If key is []byte or string it uses the key directly. Otherwise, it marshals the given type into bytes using the stores Encoder.

func (*Store) Pull

func (s *Store) Pull(key interface{}, b interface{}) error

Pull will retrieve b with key "key", and removes it from the store.

func (*Store) Put

func (s *Store) Put(key interface{}, b interface{}) error

Put will store b with key "key". If key is []byte or string it uses the key directly. Otherwise, it marshals the given type into bytes using the stores Encoder.

type XMLCodec

type XMLCodec struct{}

XMLCodec is used to encode/decode XML

func (XMLCodec) NewDecoder

func (c XMLCodec) NewDecoder(r io.Reader) Decoder

NewDecoder returns a new xml decoder which reads from r

func (XMLCodec) NewEncoder

func (c XMLCodec) NewEncoder(w io.Writer) Encoder

NewEncoder returns a new xml encoder which writes to w

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL