hugegraph-client-go/api/v1/schema.go (119 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"
"fmt"
"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 Schema information of HugeGraph
//
// See full documentation at https://hugegraph.apache.org/docs/clients/restful-api/schema/#11-schema
func newSchemaFunc(t api.Transport) Schema {
return func(o ...func(*SchemaRequest)) (*SchemaResponse, error) {
var r = SchemaRequest{}
for _, f := range o {
f(&r)
}
return r.Do(r.ctx, t)
}
}
type Schema func(o ...func(*SchemaRequest)) (*SchemaResponse, error)
type SchemaRequest struct {
Body io.Reader
ctx context.Context
config hgtransport.Config
}
type SchemaResponse struct {
StatusCode int `json:"-"`
Header http.Header `json:"-"`
Body io.ReadCloser `json:"-"`
Data SchemaResponseData `json:"-"`
}
type SchemaResponseData struct {
Propertykeys []struct {
ID int `json:"id"`
Name string `json:"name"`
DataType string `json:"data_type"`
Cardinality string `json:"cardinality"`
AggregateType string `json:"aggregate_type"`
WriteType string `json:"write_type"`
Properties []interface{} `json:"properties"`
Status string `json:"status"`
UserData struct {
CreateTime string `json:"~create_time"`
} `json:"user_data"`
} `json:"propertykeys"`
Vertexlabels []struct {
ID int `json:"id"`
Name string `json:"name"`
IDStrategy string `json:"id_strategy"`
PrimaryKeys []string `json:"primary_keys"`
NullableKeys []interface{} `json:"nullable_keys"`
IndexLabels []string `json:"index_labels"`
Properties []string `json:"properties"`
Status string `json:"status"`
TTL int `json:"ttl"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
CreateTime string `json:"~create_time"`
} `json:"user_data"`
} `json:"vertexlabels"`
Edgelabels []struct {
ID int `json:"id"`
Name string `json:"name"`
SourceLabel string `json:"source_label"`
TargetLabel string `json:"target_label"`
Frequency string `json:"frequency"`
SortKeys []interface{} `json:"sort_keys"`
NullableKeys []interface{} `json:"nullable_keys"`
IndexLabels []string `json:"index_labels"`
Properties []string `json:"properties"`
Status string `json:"status"`
TTL int `json:"ttl"`
EnableLabelIndex bool `json:"enable_label_index"`
UserData struct {
CreateTime string `json:"~create_time"`
} `json:"user_data"`
} `json:"edgelabels"`
Indexlabels []struct {
ID int `json:"id"`
Name string `json:"name"`
BaseType string `json:"base_type"`
BaseValue string `json:"base_value"`
IndexType string `json:"index_type"`
Fields []string `json:"fields"`
Status string `json:"status"`
UserData struct {
CreateTime string `json:"~create_time"`
} `json:"user_data"`
} `json:"indexlabels"`
}
func (r SchemaRequest) Do(ctx context.Context, transport api.Transport) (*SchemaResponse, error) {
req, err := api.NewRequest("GET", fmt.Sprintf("/graphs/%s/schema", transport.GetConfig().Graph), 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
}
schemaRespData := SchemaResponseData{}
bytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(bytes, &schemaRespData)
if err != nil {
return nil, err
}
schemaResp := &SchemaResponse{}
schemaResp.StatusCode = res.StatusCode
schemaResp.Header = res.Header
schemaResp.Body = res.Body
schemaResp.Data = schemaRespData
return schemaResp, nil
}