public static string GenerateFieldTypeWriter(Field f, string stream, string binaryWriter, string instance)
{
if (f.OptionCodeType != null) {
switch (f.OptionCodeType) {
case "DateTime":
case "TimeSpan":
return "ProtocolParser.WriteUInt64 (" + stream + ", (ulong)" + instance + ".Ticks);\n";
default: //enum
break;
}
}
switch (f.ProtoType) {
case ProtoTypes.Double:
case ProtoTypes.Float:
case ProtoTypes.Fixed32:
case ProtoTypes.Fixed64:
case ProtoTypes.Sfixed32:
case ProtoTypes.Sfixed64:
return binaryWriter + ".Write(" + instance + ");\n";
case ProtoTypes.Int32:
return "ProtocolParser.WriteUInt32(" + stream + ", (uint)" + instance + ");\n";
case ProtoTypes.Int64:
return "ProtocolParser.WriteUInt64(" + stream + ", (ulong)" + instance + ");\n";
case ProtoTypes.Uint32:
return "ProtocolParser.WriteUInt32(" + stream + ", " + instance + ");\n";
case ProtoTypes.Uint64:
return "ProtocolParser.WriteUInt64(" + stream + ", " + instance + ");\n";
case ProtoTypes.Sint32:
return "ProtocolParser.WriteSInt32(" + stream + ", " + instance + ");\n";
case ProtoTypes.Sint64:
return "ProtocolParser.WriteSInt64(" + stream + ", " + instance + ");\n";
case ProtoTypes.Bool:
return "ProtocolParser.WriteBool(" + stream + ", " + instance + ");\n";
case ProtoTypes.String:
return "ProtocolParser.WriteString(" + stream + ", " + instance + ");\n";
case ProtoTypes.Bytes:
return "ProtocolParser.WriteBytes(" + stream + ", " + instance + ");\n";
case ProtoTypes.Enum:
return "ProtocolParser.WriteUInt32(" + stream + ", (uint)" + instance + ");\n";
case ProtoTypes.Message:
string code = "";
code += "using(MemoryStream ms" + f.ID + " = new MemoryStream())\n";
code += "{\n";
code += " " + f.FullPath + ".Serialize(ms" + f.ID + ", " + instance + ");\n";
code += " ProtocolParser.WriteBytes(" + stream + ", ms" + f.ID + ".ToArray());\n";
code += "}\n";
return code;
default:
throw new NotImplementedException ();
}
}