public T Deserialize <T>(pb::MessageParser <T> parser) where T : pb::IMessage <T> { var bytes = new byte[_length]; Marshal.Copy(_str, bytes, 0, bytes.Length); return(parser.ParseFrom(bytes)); }
static Func <byte[], T> DeserializerFn(pb::MessageParser <T> parser) { return((serialized) => { pb::CodedInputStream inStream = new pb::CodedInputStream(serialized); return parser.ParseFrom(inStream); }); }
public static T DeserializeProto <T>(IntPtr ptr, pb::MessageParser <T> parser) where T : pb::IMessage <T> { var serializedProto = Marshal.PtrToStructure <SerializedProto>(ptr); var bytes = new byte[serializedProto.length]; Marshal.Copy(serializedProto.str, bytes, 0, bytes.Length); return(parser.ParseFrom(bytes)); }
public static T FromPtr <T>(IntPtr ptr, pb::MessageParser <T> parser) where T : pb::IMessage <T> { var inner = Marshal.PtrToStructure <SerializedProtoInner>(ptr); var bytes = new byte[inner.length]; unsafe { Marshal.Copy((IntPtr)inner.serializedStr, bytes, 0, inner.length); } return(parser.ParseFrom(bytes)); }