package exporter import ( "io" "encoding/json" "github.com/google/cayley/graph" ) type Exporter struct { wr io.Writer qstore graph.QuadStore err error count int32 } func NewExporter(writer io.Writer, qstore graph.QuadStore) *Exporter { return &Exporter{wr: writer, qstore: qstore} } // number of records func (exp *Exporter) Count() int32 { return exp.count } func (exp *Exporter) ExportNquad() { it := exp.qstore.QuadsAllIterator() for graph.Next(it) { exp.count++ quad := exp.qstore.Quad(it.Result()) exp.WriteEscString(quad.Subject) exp.Write(" ") exp.WriteEscString(quad.Predicate) exp.Write(" ") exp.WriteEscString(quad.Object) if quad.Label != "" { exp.Write(" ") exp.WriteEscString(quad.Label) } exp.Write(" .\n") } } func (exp *Exporter) ExportJson() { var jstr []byte exp.Write("[") it := exp.qstore.QuadsAllIterator() for graph.Next(it) { exp.count++ if exp.count > 1 { exp.Write(",") } jstr, exp.err = json.Marshal(exp.qstore.Quad(it.Result())) if exp.err != nil { return } exp.Write(string(jstr[:])) } exp.Write("]\n") } //print out the string quoted, escaped func (exp *Exporter) WriteEscString(str string) { var esc []byte if exp.err != nil { return } esc, exp.err = json.Marshal(str) if exp.err != nil { return } _, exp.err = exp.wr.Write(esc) } func (exp *Exporter) Write(str string) { if exp.err != nil { return } _, exp.err = exp.wr.Write([]byte(str)) } func (exp *Exporter) Err() error { return exp.err }