51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
|
package influxql
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
)
|
||
|
|
||
|
// Result represents a resultset returned from a single statement.
|
||
|
type Result struct {
|
||
|
// StatementID is just the statement's position in the query. It's used
|
||
|
// to combine statement results if they're being buffered in memory.
|
||
|
StatementID int `json:"-"`
|
||
|
Series Rows
|
||
|
Err error
|
||
|
}
|
||
|
|
||
|
// MarshalJSON encodes the result into JSON.
|
||
|
func (r *Result) MarshalJSON() ([]byte, error) {
|
||
|
// Define a struct that outputs "error" as a string.
|
||
|
var o struct {
|
||
|
Series []*Row `json:"series,omitempty"`
|
||
|
Err string `json:"error,omitempty"`
|
||
|
}
|
||
|
|
||
|
// Copy fields to output struct.
|
||
|
o.Series = r.Series
|
||
|
if r.Err != nil {
|
||
|
o.Err = r.Err.Error()
|
||
|
}
|
||
|
|
||
|
return json.Marshal(&o)
|
||
|
}
|
||
|
|
||
|
// UnmarshalJSON decodes the data into the Result struct
|
||
|
func (r *Result) UnmarshalJSON(b []byte) error {
|
||
|
var o struct {
|
||
|
Series []*Row `json:"series,omitempty"`
|
||
|
Err string `json:"error,omitempty"`
|
||
|
}
|
||
|
|
||
|
err := json.Unmarshal(b, &o)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
r.Series = o.Series
|
||
|
if o.Err != "" {
|
||
|
r.Err = errors.New(o.Err)
|
||
|
}
|
||
|
return nil
|
||
|
}
|