Пример #1
0
def gen_store_code_for_field(f, msg, parent_struct_name):
    tmpl = ""
    if util.field_is_message(f) and util.field_is_repeated(f):
        tmpl = (
            "    output.{field}.length = input.{field}.length;             \n"
            "    for(uint i{i}=0; i{i}<input.{field}.length; i{i}++) {{    \n"
            "      {lib}.store(input.{field}[i{i}], output.{field}[i{i}]); \n"
            "      {map_insert_code}"
            "    }}"
        )
    elif util.field_is_message(f):
        tmpl = (
            "    {lib}.store(input.{field}, output.{field});               \n"
        )
    else:
        return (
            "    output.{field} = input.{field};                           \n" 
        ).format(
            field = f.name,
        )

    libname = util.gen_struct_codec_lib_name_from_field(f)

    return tmpl.format(
        i = f.number,
        field = f.name,
        lib = libname,
        map_insert_code = gen_map_insert_on_store(f, msg, parent_struct_name)
    )
Пример #2
0
def gen_value_copy_code(value_field, dst_flagment):
    if util.field_is_message(value_field):
        return ("{struct_name}.store(value, {dst}.value);").format(
            struct_name=util.gen_struct_codec_lib_name_from_field(value_field),
            dst=dst_flagment)
    else:
        return ("{dst}.value = value;").format(dst=dst_flagment)
Пример #3
0
def gen_field_scalar_size(f):
    wt = util.gen_wire_type(f)
    vt = util.field_pb_type(f)
    fname = f.name + ("[i]" if util.field_is_repeated(f) else "")
    if wt == "Varint":
        if vt == "bool":
            return "1"
        else:
            return ("_pb._sz_{valtype}(r.{field})").format(
                valtype=vt,
                field=fname,
            )
    elif wt == "Fixed64":
        return "8"
    elif wt == "Fixed32":
        return "4"
    elif wt == "LengthDelim":
        if vt == "bytes":
            return ("_pb._sz_lendelim(r.{field}.length)").format(field=fname)
        elif vt == "string":
            return ("_pb._sz_lendelim(bytes(r.{field}).length)").format(
                field=fname)
        elif vt == "message":
            st = util.field_sol_type(f)
            if st is None:
                return ("_pb._sz_lendelim({lib}._estimate(r.{field}))").format(
                    lib=util.gen_struct_codec_lib_name_from_field(f),
                    field=fname,
                )
            else:
                return "{}".format(util.gen_soltype_estimate_len(st))
        else:
            return ("__does not support pb type {t}__").format(t=vt)
    else:
        return ("__does not support wire type {t}__").format(t=wt)
Пример #4
0
def gen_struct_decoder(f, msg, parent_struct_name):
    return (
        "  function {name}(uint p, bytes bs)            \n"
        "      internal pure returns ({struct}, uint) {{    \n"
        "    (uint sz, uint bytesRead) = _pb._decode_varint(p, bs);   \n"
        "    p += bytesRead;                                    \n"
        "    ({decode_type} r,) = {lib}._decode(p, bs, sz);               \n"
        "    return (r, sz + bytesRead);                        \n"
        "  }}      \n").format(
            struct=util.gen_global_type_name_from_field(f),
            decode_type=util.gen_global_type_decl_from_field(f),
            name=util.gen_struct_decoder_name_from_field(f),
            lib=util.gen_struct_codec_lib_name_from_field(f))
Пример #5
0
def gen_field_scalar_size(f, msg, file):
    wt = util.gen_wire_type(f)
    vt = util.field_pb_type(f)
    fname = f.name + ("[i]" if util.field_is_repeated(f) else "")
    if wt == "Varint":
        if vt == "bool":
            return "1"
        if vt == "enum":
            type_name = util.gen_enum_name_from_field(f)
            library_name = "" if msg.name == type_name.split(".")[0] else (
                type_name.split(".")[0] + ".")
            if library_name == ".":
                library_name = util.gen_global_enum_name(file) + library_name
            return (
                "ProtoBufRuntime._sz_{valtype}({library_name}encode_{enum_name}(r.{field}))"
            ).format(valtype=vt,
                     field=fname,
                     enum_name=type_name.split(".")[-1],
                     library_name=library_name)
        else:
            return ("ProtoBufRuntime._sz_{valtype}(r.{field})").format(
                valtype=vt,
                field=fname,
            )
    elif wt == "Fixed64":
        return "8"
    elif wt == "Fixed32":
        return "4"
    elif wt == "LengthDelim":
        if vt == "bytes":
            return ("ProtoBufRuntime._sz_lendelim(r.{field}.length)").format(
                field=fname)
        elif vt == "string":
            return ("ProtoBufRuntime._sz_lendelim(bytes(r.{field}).length)"
                    ).format(field=fname)
        elif vt == "message":
            st = util.field_sol_type(f)
            if st is None:
                return (
                    "ProtoBufRuntime._sz_lendelim({lib}._estimate(r.{field}))"
                ).format(
                    lib=util.gen_struct_codec_lib_name_from_field(f),
                    field=fname,
                )
            else:
                return "{}".format(util.gen_soltype_estimate_len(st))
        else:
            return ("__does not support pb type {t}__").format(t=vt)
    else:
        return ("__does not support wire type {t}__").format(t=wt)
Пример #6
0
def gen_store_code_for_field(f, msg, parent_struct_name):
    tmpl = ""
    if util.field_is_message(f) and util.field_is_repeated(f):
        tmpl = sol_constants.STORE_REPEATED
    elif util.field_is_message(f):
        tmpl = sol_constants.STORE_MESSAGE
    else:
        return (sol_constants.STORE_OTHER).format(field=f.name)

    libname = util.gen_struct_codec_lib_name_from_field(f)

    return tmpl.format(i=f.number,
                       field=f.name,
                       lib=libname,
                       map_insert_code=gen_map_insert_on_store(
                           f, msg, parent_struct_name))
Пример #7
0
def gen_struct_decoder(f, msg, parent_struct_name):
    return (decoder_constants.STRUCT_DECORDER).format(
        struct=util.gen_global_type_name_from_field(f),
        decode_type=util.gen_global_type_decl_from_field(f),
        name=util.gen_struct_decoder_name_from_field(f),
        lib=util.gen_struct_codec_lib_name_from_field(f))