hugegraph-client-go/api/v1/version.go (63 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package v1
import (
"context"
"encoding/json"
"github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/hgtransport"
"io"
"io/ioutil"
"net/http"
"github.com/apache/incubator-hugegraph-toolchain/hugegraph-client-go/api"
)
// ----- API Definition -------------------------------------------------------
// View version information of HugeGraph
//
// See full documentation at https://hugegraph.apache.org/docs/clients/restful-api/other/#1111-view-version-information-of-hugegraph
func newVersionFunc(t api.Transport) Version {
return func(o ...func(*VersionRequest)) (*VersionResponse, error) {
var r = VersionRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
type Version func(o ...func(*VersionRequest)) (*VersionResponse, error)
type VersionRequest struct {
Body io.Reader
ctx context.Context
config hgtransport.Config
}
type VersionResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Versions VersionResponseData `json:"versions"`
}
type VersionResponseData struct {
Version string `json:"version"` // hugegraph version
Core string `json:"core"` // hugegraph core version
Gremlin string `json:"gremlin"` // hugegraph gremlin version
API string `json:"api"` // hugegraph api version
}
func (r VersionRequest) Do(ctx context.Context, transport api.Transport) (*VersionResponse, error) {
req, err := api.NewRequest("GET", "/versions", nil, r.Body)
if err != nil {
return nil, err
}
if ctx != nil {
req = req.WithContext(ctx)
}
res, err := transport.Perform(req)
if err != nil {
return nil, err
}
versionResp := &VersionResponse{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(bytes, versionResp)
if err != nil {
return nil, err
}
versionResp.StatusCode = res.StatusCode
versionResp.Header = res.Header
versionResp.Body = res.Body
return versionResp, nil
}