func getPath()

in gdbclient/internal/graphsonv3/graphreader.go [398:437]


func getPath(r *result) (interface{}, error) {
	v := &pathV3{}
	err := json.Unmarshal(r.Value, v)
	if err != nil {
		return nil, internal.NewDeserializerError("path", r.Value, err)
	}

	if v.Labels.Type != gTypeList || v.Objects.Type != gTypeList {
		return nil, internal.NewDeserializerError("path", r.Value, errors.New("inner type error"))
	}

	objects, err := resultListRouter(v.Objects.Value)
	if err != nil {
		return nil, err
	}

	labels, err := resultListRouter(v.Labels.Value)
	if err != nil {
		return nil, err
	}

	// check size
	if len(objects) != len(labels) {
		return nil, internal.NewDeserializerError("path", r.Value, errors.New("un-pair labels and objects"))
	}

	path := graph.NewDetachedPath()
	for i := 0; i < len(objects); i++ {
		var labels_str []string

		label := labels[i].([]interface{})
		labels_str = make([]string, len(label), len(label))

		for i := 0; i < len(label); i++ {
			labels_str[i] = label[i].(string)
		}
		path.Extend(objects[i], labels_str)
	}
	return path, nil
}