1package couchdb
2
3import (
4	"context"
5	"encoding/json"
6
7	"github.com/go-kivik/kivik"
8	"github.com/go-kivik/kivik/driver"
9)
10
11// Version returns the server's version info.
12func (c *client) Version(ctx context.Context) (*driver.Version, error) {
13	i := &info{}
14	_, err := c.DoJSON(ctx, kivik.MethodGet, "/", nil, i)
15	return &driver.Version{
16		Version:     i.Version,
17		Vendor:      i.Vendor.Name,
18		Features:    i.Features,
19		RawResponse: i.Data,
20	}, err
21}
22
23type info struct {
24	Data     json.RawMessage
25	Version  string   `json:"version"`
26	Features []string `json:"features"`
27	Vendor   struct {
28		Name string `json:"name"`
29	} `json:"vendor"`
30}
31
32func (i *info) UnmarshalJSON(data []byte) error {
33	type alias info
34	var a alias
35	if err := json.Unmarshal(data, &a); err != nil {
36		return err
37	}
38	i.Data = data
39	i.Version = a.Version
40	i.Vendor = a.Vendor
41	i.Features = a.Features
42	return nil
43}
44