This commit is contained in:
aozhiwei 2022-01-01 14:09:50 +08:00
parent 706be6c8fa
commit c8ca016ae7

View File

@ -5,7 +5,10 @@ use protobuf::Message;
use protobuf::descriptor::FieldDescriptorProto_Type;
pub trait ProtoMsg {
fn get_proto(&self) -> &dyn Message;
fn deserialize(&self,
obj: &serde_json::Map<String, serde_json::Value>,
id_key: &mut i64,
name_key: &mut String) {}
fn init1(&self) {}
fn init2(&self) {}
fn init3(&self) {}
@ -26,19 +29,22 @@ pub struct MetaMgr<T> {
meta_classes: Vec<MetaClass::<T>>,
}
fn json_to_pb(obj: &serde_json::Map<String, serde_json::Value>, pb: &dyn protobuf::Message) {
fn json_to_pb(obj: &serde_json::Map<String, serde_json::Value>, pb: &mut dyn protobuf::Message) {
let mut v = Vec::<u8>::new();
let desc = pb.descriptor();
for field in desc.fields() {
let field_desc = field.proto();
match obj.get(field.name()) {
Some(v) => {
}
None => {
}
}
}
let mut slice: &[u8] = v.as_slice();
let is = &mut ::protobuf::CodedInputStream::new(&mut slice);
pb.merge_from(is);
}
impl<T: Clone + ProtoMsg> MetaMgr<T> {
@ -69,7 +75,9 @@ impl<T: Clone + ProtoMsg> MetaMgr<T> {
},
serde_json::Value::Object(obj) =>{
let msg = Rc::new(meta.dummy.clone());
json_to_pb(&obj, msg.get_proto());
let id_key = &mut 0;
let name_key = &mut String::new();
msg.deserialize(&obj, id_key, name_key);
meta.wrap_list.push(msg);
},
_ => {