f5/metautils.go
aozhiwei a10ae56c4f 1
2020-09-02 18:45:35 +08:00

42 lines
1.1 KiB
Go

package f5
import (
"os"
"bufio"
"reflect"
"fmt"
"github.com/golang/protobuf/proto"
"github.com/golang/protobuf/jsonpb"
"google.golang.org/protobuf/reflect/protoregistry"
)
func ReadJsonMetaFile(fileName string, list interface{}) {
msgType := reflect.TypeOf(list).Elem().Elem().Elem()
msg := reflect.New(msgType)
msgPb := msg.Interface().(proto.Message)
msgReflect := proto.MessageReflect(msgPb)
msgDesc := msgReflect.Descriptor()
meta, _ := protoregistry.GlobalTypes.FindMessageByName(msgDesc.FullName() + "Metas")
metaList := meta.New()
f, _ := os.Open(fileName)
data, _ := bufio.NewReader(f).ReadString(0)
data = "{\"values\":" + data
data += "}"
err := jsonpb.UnmarshalString(data, proto.MessageV1(metaList))
if err == nil {
fmt.Println("json decode ok", data)
}
fmt.Println(err)
/* msgReflect = proto.MessageReflect(proto.MessageV1(metaList))
msgDesc = msgReflect.Descriptor()
valuesField := msgDesc.Fields().ByName("values")
values := msgReflect.Get(valuesField)
reflect.ValueOf(list).Elem().Set(reflect.ValueOf(values.List()))
_ = valuesField
fmt.Println(valuesField, values)*/
}