protoc-gen-lua 여러 proto 내장 실현
2785 단어 lua
basic.proto 에서 메시지 바 꾸 기:
message Item{
required int32 id = 1;
...
}
또 다른 proto 는 basic.proto 의 Item 이라는 message 를 인용 합 니 다.예 를 들 어 userproc.proto
message Sell{
optional int32 t = 1;
repeated Item items = 2;
...
}
인용 을 추가 하지 않 으 면 상기 proto 가 잘못 보고 할 수 있 습 니 다.정상 적 인 상황 에서 package 를 도입 해 야 합 니 다.basic.proto 와 userproc.proto 는 다음 과 같이 수정 합 니 다.
#basic.lua
package protobuf_basic_export
.....
4.567913.이렇게 내 보 내 면 잘못 보고 하지 않 고 protobuf 의 쓰기 요구 에 부합 합 니 다.
그러나 protoc-gen-lua 에서 내 보 낸 lua 파일 에 문제 가 있 습 니 다.실행 한 결과 userproc_pb_lua 오류 보고:BAISCPB_ITEM 에서 찾 을 수 없습니다.이것 은 도구 가 만 든 필드 입 니 다.이 type 이 현재 proto 아래 에 없 을 때 생 성 됩 니 다.합 성 된 필드 입 니 다.lua 가 실행 하면 이 필드 를 찾 을 수 없습니다.우리 가 수정 하고 자 하 는 곳 도 다음 과 같이 바 꿔 야 합 니 다.
USER_PROC_ITEM_FIELD.message_type = BASIC_PB.ITEM
BASICPB 내 보 낼 basicpb.lua 파일 이 므 로 내 보 낸 python 파일 을 수정 하여 우리 의 요 구 를 실현 합 니 다.
1:합병 제거
#user_proc.proto
import "basic.proto";
message Sell{
optional int32 t = 1;
repeated protobuf_basic_export.Item items = 2;
...
}
:2:message descriptor 를 전역 으로 설정 합 니 다.
if field_desc.HasField('type_name'):
type_name = env.get_ref_name(field_desc.type_name).upper()
3:pb 대문자 인용,유형 일치 즉 local BASICPB = require("basic_pb")
def code_gen_message(message_descriptor, env, containing_type = None):
env.enter(message_descriptor.name)
full_name = env.get_local_name()
obj_name = full_name.upper().replace('.', '_')
env.descriptor.append(
"%s = protobuf.Descriptor();
"% obj_name
):
내 보 내기 후 파일 변환:
if is_gen:
lua = Writer()
write_header(lua)
lua('local protobuf = require "protobuf"
')
for i in includes:
lua('local %s_PB = require("%s_pb")
' % (i.upper(), i))
lua("module('%s_pb')
" % env.filename)
-- Generated By protoc-gen-lua Do not Edit
local protobuf = require "protobuf"
module('basic_pb')
ITEM= protobuf.Descriptor();
local ITEM_ID_FIELD = protobuf.FieldDescriptor();
이렇게 베 이 직PB.ITEM 은 찾 을 수 있 습 니 다.바로 basicpb.lua 리
git https://github.com/AdamWu/protoc-gen-lua
ps:구름 바람 pb 를 사용 할 수 있 습 니 다.proto 관 계 를 지원 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Neovim을 위한 자동 완성NeoVim으로 생산성을 높일 수 있는 가장 멋진 기능 중 하나는 자동 완성이므로 성능에 따라 플러그인을 선택할 수 있습니다. YouCompleteMe Coc.nvim 이 플러그인은 사용하기 좋지만 Javascrip...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.