pkg/database/cosmosdb/zz_generated_database.go (116 lines of code) (raw):
// Code generated by github.com/bennerv/go-cosmosdb, DO NOT EDIT.
package cosmosdb
import (
"context"
"net/http"
"sync"
"github.com/sirupsen/logrus"
"github.com/ugorji/go/codec"
)
// Database represents a database
type Database struct {
ID string `json:"id,omitempty"`
ResourceID string `json:"_rid,omitempty"`
Timestamp int `json:"_ts,omitempty"`
Self string `json:"_self,omitempty"`
ETag string `json:"_etag,omitempty"`
Collections string `json:"_colls,omitempty"`
Users string `json:"_users,omitempty"`
}
// Databases represents databases
type Databases struct {
Count int `json:"_count,omitempty"`
ResourceID string `json:"_rid,omitempty"`
Databases []*Database `json:"Databases,omitempty"`
}
type databaseClient struct {
mu sync.RWMutex
log *logrus.Entry
hc *http.Client
jsonHandle *codec.JsonHandle
databaseHostname string
authorizer Authorizer
maxRetries int
}
// DatabaseClient is a database client
type DatabaseClient interface {
SetAuthorizer(Authorizer)
Create(context.Context, *Database) (*Database, error)
List() DatabaseIterator
ListAll(context.Context) (*Databases, error)
Get(context.Context, string) (*Database, error)
Delete(context.Context, *Database) error
}
type databaseListIterator struct {
*databaseClient
continuation string
done bool
}
// DatabaseIterator is a database iterator
type DatabaseIterator interface {
Next(context.Context) (*Databases, error)
}
// NewDatabaseClient returns a new database client
func NewDatabaseClient(log *logrus.Entry, hc *http.Client, jsonHandle *codec.JsonHandle, databaseHostname string, authorizer Authorizer) DatabaseClient {
return &databaseClient{
log: log,
hc: hc,
jsonHandle: jsonHandle,
databaseHostname: databaseHostname,
authorizer: authorizer,
maxRetries: 10,
}
}
func (c *databaseClient) all(ctx context.Context, i DatabaseIterator) (*Databases, error) {
alldbs := &Databases{}
for {
dbs, err := i.Next(ctx)
if err != nil {
return nil, err
}
if dbs == nil {
break
}
alldbs.Count += dbs.Count
alldbs.ResourceID = dbs.ResourceID
alldbs.Databases = append(alldbs.Databases, dbs.Databases...)
}
return alldbs, nil
}
func (c *databaseClient) SetAuthorizer(authorizer Authorizer) {
c.mu.Lock()
defer c.mu.Unlock()
c.authorizer = authorizer
}
func (c *databaseClient) Create(ctx context.Context, newdb *Database) (db *Database, err error) {
err = c.do(ctx, http.MethodPost, "dbs", "dbs", "", http.StatusCreated, &newdb, &db, nil)
return
}
func (c *databaseClient) List() DatabaseIterator {
return &databaseListIterator{databaseClient: c}
}
func (c *databaseClient) ListAll(ctx context.Context) (*Databases, error) {
return c.all(ctx, c.List())
}
func (c *databaseClient) Get(ctx context.Context, dbid string) (db *Database, err error) {
err = c.do(ctx, http.MethodGet, "dbs/"+dbid, "dbs", "dbs/"+dbid, http.StatusOK, nil, &db, nil)
return
}
func (c *databaseClient) Delete(ctx context.Context, db *Database) error {
if db.ETag == "" {
return ErrETagRequired
}
headers := http.Header{}
headers.Set("If-Match", db.ETag)
return c.do(ctx, http.MethodDelete, "dbs/"+db.ID, "dbs", "dbs/"+db.ID, http.StatusNoContent, nil, nil, headers)
}
func (i *databaseListIterator) Next(ctx context.Context) (dbs *Databases, err error) {
if i.done {
return
}
headers := http.Header{}
if i.continuation != "" {
headers.Set("X-Ms-Continuation", i.continuation)
}
err = i.do(ctx, http.MethodGet, "dbs", "dbs", "", http.StatusOK, nil, &dbs, headers)
if err != nil {
return
}
i.continuation = headers.Get("X-Ms-Continuation")
i.done = i.continuation == ""
return
}