103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
package f5
|
|
|
|
import (
|
|
"q5"
|
|
"os"
|
|
"bufio"
|
|
"reflect"
|
|
"fmt"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
"github.com/golang/protobuf/jsonpb"
|
|
"google.golang.org/protobuf/reflect/protoreflect"
|
|
"google.golang.org/protobuf/reflect/protoregistry"
|
|
)
|
|
|
|
func ReadCsvMetaFile(fileName string, list interface{}) {
|
|
msgType := reflect.TypeOf(list).Elem().Elem().Elem()
|
|
|
|
csvReader := &q5.CsvReader{}
|
|
csvReader.Load(fileName)
|
|
for csvReader.NextLine() {
|
|
msg := reflect.New(msgType)
|
|
msgPb := msg.Interface().(proto.Message)
|
|
|
|
msgReflect := proto.MessageReflect(msgPb)
|
|
msgDesc := msgReflect.Descriptor()
|
|
fields := msgDesc.Fields()
|
|
for i := 0; i < fields.Len(); i++ {
|
|
field := fields.Get(i)
|
|
|
|
value := csvReader.GetValue(string(field.Name()))
|
|
xvalueToPBSampleField(value, field, msgReflect)
|
|
}
|
|
|
|
newList := reflect.Append(reflect.ValueOf(list), msg)
|
|
reflect.ValueOf(list).Elem().Set(newList)
|
|
}
|
|
}
|
|
|
|
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.Unmarshal(f, proto.MessageV1(metaList))
|
|
if err == nil {
|
|
fmt.Println("json decode ok", data)
|
|
}
|
|
|
|
/* 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)*/
|
|
}
|
|
|
|
func xvalueToPBSampleField(
|
|
value *q5.XValue,
|
|
field protoreflect.FieldDescriptor,
|
|
msgReflect protoreflect.Message) {
|
|
switch field.Kind() {
|
|
case protoreflect.BoolKind:
|
|
msgReflect.Set(field, protoreflect.ValueOfBool(value.GetInt64() != 0))
|
|
break
|
|
case protoreflect.EnumKind:
|
|
break
|
|
case
|
|
protoreflect.Int32Kind, protoreflect.Sint32Kind,
|
|
protoreflect.Sfixed32Kind, protoreflect.Fixed32Kind:
|
|
break
|
|
case protoreflect.Uint32Kind:
|
|
break
|
|
case
|
|
protoreflect.Int64Kind, protoreflect.Sint64Kind,
|
|
protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind:
|
|
break
|
|
case protoreflect.Uint64Kind:
|
|
break
|
|
case protoreflect.FloatKind:
|
|
break
|
|
case protoreflect.DoubleKind:
|
|
break
|
|
case protoreflect.StringKind:
|
|
break
|
|
case protoreflect.BytesKind:
|
|
break
|
|
case protoreflect.MessageKind:
|
|
break
|
|
case protoreflect.GroupKind:
|
|
break
|
|
}
|
|
}
|