package sdb_test
import (
"context"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"github.com/keys-pub/keys"
"github.com/keys-pub/keys-ext/sdb"
"github.com/keys-pub/keys/dstore"
)
func ExampleNew() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
type Message struct {
ID string `json:"id"`
Content string `json:"content"`
}
msg := &Message{ID: "id1", Content: "hi"}
if err := db.Set(context.TODO(), dstore.Path("collection1", "doc1"), dstore.From(msg)); err != nil {
log.Fatal(err)
}
iter, err := db.DocumentIterator(context.TODO(), dstore.Path("collection1"))
if err != nil {
log.Fatal(err)
}
defer iter.Release()
for {
doc, err := iter.Next()
if err != nil {
log.Fatal(err)
}
if doc == nil {
break
}
var msg Message
if err := doc.To(&msg); err != nil {
log.Fatal(err)
}
fmt.Printf("%s: %s\n", doc.Path, msg.Content)
}
}
func ExampleDB_OpenAtPath() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
}
func ExampleDB_Create() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
if err := db.Create(context.TODO(), "/test/1", dstore.Data([]byte{0x01, 0x02, 0x03})); err != nil {
log.Fatal(err)
}
}
func ExampleDB_Get() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
defer os.RemoveAll(path)
if err := db.Set(context.TODO(), dstore.Path("collection1", "doc1"), dstore.Data([]byte("hi"))); err != nil {
log.Fatal(err)
}
doc, err := db.Get(context.TODO(), dstore.Path("collection1", "doc1"))
if err != nil {
log.Fatal(err)
}
fmt.Printf("Got %s\n", string(doc.Data()))
}
func ExampleDB_Set() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
defer os.RemoveAll(path)
type Message struct {
ID string `msgpack:"id"`
Content string `msgpack:"content"`
}
msg := &Message{ID: "id1", Content: "hi"}
if err := db.Set(context.TODO(), dstore.Path("collection1", "doc1"), dstore.From(msg)); err != nil {
log.Fatal(err)
}
doc, err := db.Get(context.TODO(), dstore.Path("collection1", "doc1"))
if err != nil {
log.Fatal(err)
}
var out Message
if err := doc.To(&out); err != nil {
log.Fatal(err)
}
fmt.Printf("Message: %s\n", out.Content)
}
func ExampleDB_Documents() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
defer os.RemoveAll(path)
if err := db.Set(context.TODO(), dstore.Path("collection1", "doc1"), dstore.Data([]byte("hi"))); err != nil {
log.Fatal(err)
}
docs, err := db.Documents(context.TODO(), dstore.Path("collection1"))
if err != nil {
log.Fatal(err)
}
for _, doc := range docs {
fmt.Printf("%s: %s\n", doc.Path, string(doc.Data()))
}
}
func ExampleDB_DocumentIterator() {
db := sdb.New()
defer db.Close()
key := keys.Rand32()
dir, err := ioutil.TempDir("", "")
if err != nil {
log.Fatal(err)
}
path := filepath.Join(dir, "my.sdb")
if err := db.OpenAtPath(context.TODO(), path, key); err != nil {
log.Fatal(err)
}
defer os.RemoveAll(path)
type Message struct {
ID string `json:"id"`
Content string `json:"content"`
}
msg := &Message{ID: "id1", Content: "hi"}
if err := db.Set(context.TODO(), dstore.Path("collection1", "doc1"), dstore.From(msg)); err != nil {
log.Fatal(err)
}
iter, err := db.DocumentIterator(context.TODO(), dstore.Path("collection1"))
if err != nil {
log.Fatal(err)
}
defer iter.Release()
for {
doc, err := iter.Next()
if err != nil {
log.Fatal(err)
}
if doc == nil {
break
}
var msg Message
if err := doc.To(&msg); err != nil {
log.Fatal(err)
}
fmt.Printf("%s: %s\n", doc.Path, msg.Content)
}
}