ducky/subscriptions

Paddy 2015-07-18 Parent:f1a22fc2321d

9:8eb19bcbf17d Go to Latest

ducky/subscriptions/postgres.go

Return errors from responses in client. When the client makes a request, non-200 responses _are not_ considered errors. So we need to check the response.Errors property, and if it has errors, _then_ we consider the request to have an error. To make this happen, we created an httpErrors type that fulfills the error interface and just wraps the response Errors property. Then callers can type-cast it and interrogate it.

History
paddy@1 1 package subscriptions
paddy@1 2
paddy@1 3 import (
paddy@1 4 "database/sql"
paddy@1 5 )
paddy@1 6
paddy@1 7 // NewPostgres returns a usable Postgres instance, if and only
paddy@1 8 // if error is nil. If error is not nil, the returned Postgres
paddy@1 9 // instance should not be used.
paddy@1 10 func NewPostgres(conn string) (Postgres, error) {
paddy@1 11 db, err := sql.Open("postgres", conn)
paddy@1 12 if err != nil {
paddy@1 13 return Postgres{}, err
paddy@1 14 }
paddy@1 15 return Postgres{db}, nil
paddy@1 16 }
paddy@1 17
paddy@1 18 // Postgres represents a thin wrapper around *sql.DB, so we can
paddy@1 19 // inherit its methods but also define our own (so we can fulfill
paddy@1 20 // our subscriptionStore interface on Postgres). Note that the
paddy@1 21 // value of a Postgres variable contains a _pointer_ to an sql.DB
paddy@1 22 // pool of connections, so it's not necessary to use the address of
paddy@1 23 // the Postgres variable itself (though there shouldn't be any harm
paddy@1 24 // in doing so).
paddy@1 25 type Postgres struct {
paddy@1 26 *sql.DB
paddy@1 27 }