빌드 시스템은 rust_protobuf
모듈 유형을 통해 protobuf 인터페이스의 생성을 지원합니다.
기본적인 protobuf 코드 생성은 rust-protobuf
크레이트를 사용하여 진행됩니다.
이 사용법에 관한 도움말을 보려면 관련 protobuf 예시가 포함된 GitHub 프로젝트 페이지를 참고하세요.
gRPC protobuf도 지원되며, 생성은 grpc-rs
크레이트를 사용하여 진행됩니다.
이 사용법에 관한 도움말을 보려면 관련 gRPC GitHub 프로젝트 페이지의 도움말을 참고하세요.
기본적인 rust_protobuf 빌드 사용법
다음은 protobuf 모듈을 정의하고 이 모듈을 크레이트로 사용하는 예입니다. 주요 속성 및 사용법에 관한 자세한 내용은 rust_protobuf
정의 섹션을 참고하세요.
타사 코드의 경우와 같이 protobuf로 생성된 코드를 include!()
매크로를 통해 사용해야 하는 경우 소스 생성기 페이지에서 예를 참고하세요. (이 예에서는 rust_bindgen
모듈을 사용하지만, 소스 포함 방법은 모든 소스 생성기에서 동일합니다.)
rust_protobuf Android.bp 모듈 정의
Android.bp를 기준으로 src/protos/my.proto
에 있다고 proto가 가정하겠습니다. 이 경우 모듈은 다음과 같이 정의됩니다.
rust_protobuf {
name: "libmy_proto",
// Crate name that's used to generate the rust_library variants.
crate_name: "my_proto",
// Relative paths to the protobuf source files
protos: ["src/protos/my.proto"],
// If protobufs define gRPCs, then they should go in grpc_protos
// instead.
// grpc_protos: ["src/protos/my.proto"],
// 'source_stem' controls the output filename.
// This is the filename that's used in an include! macro.
source_stem: "my_proto_source",
}
이 크레이트를 사용하는 라이브러리는 여느 라이브러리 종속 항목과 동일하게 이 라이브러리를 참조함으로써 정의됩니다.
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
rust_protobuf 모듈의 크레이트 구조
각 protobuf 파일은 크레이트 내에서 그 자체의 모듈로서 구성됩니다. 모듈의 이름은 protobuf 파일의 이름을 그대로 따릅니다. 즉, 모든 proto 기본 파일 이름은 고유해야 합니다. 예를 들어, 다음과 같이 정의된 rust_protobuf
를 살펴보겠습니다.
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
이 크레이트 내의 여러 proto는 다음과 같이 액세스됩니다.
// use <crate_name>::<proto_filename>
use foo::a; // protobuf interface defined in a.proto
use foo::b; // protobuf interface defined in b.proto
use foo::c; // protobuf interface defined in c.proto
use foo::c_grpc; // grpc interface defined in c.proto
주목할 만한 rust_protobuf 속성
모든 모듈에 적용되는 주요 공통 속성 외에도 아래에 정의된 속성이 있습니다. 이들은 Rust protobuf 모듈에서 특히 중요한 속성이거나 rust_protobuf
모듈 유형의 고유한 동작을 나타내는 속성입니다.
stem, name, crate_name
rust_protobuf
는 라이브러리 변형을 생성하므로 이 세 가지 속성에도 rust_library
모듈과 동일한 요구사항이 적용됩니다. 자세한 내용은 rust_library
속성을 참고하세요.
protos
protobuf 인터페이스를 생성하기 위한 경로의 목록으로, 경로는 protobuf 파일을 기준으로 하는 상대 경로입니다. 기본 파일 이름은 protos
및 grpc_protos
에서 고유해야 합니다.
grpc_protos
grpc_protos
은 grpcs
를 정의하여 protobuf 인터페이스를 생성하기 위한 경로의 목록을 포함합니다. 경로는 protobuf 파일의 기준으로 하는 상대 경로입니다. 기본 파일 이름은 protos
및 grpc_protos
에서 고유해야 합니다.
source_stem
source_stem
은 포함할 수 있는 생성된 소스 파일의 파일 이름입니다.
필수 필드 정의입니다. stem
속성은 생성된 라이브러리 변형의 출력 파일 이름만 제어하므로, 바인딩을 크레이트로 사용하는 경우에도 필수입니다. 다른 소스 생성기와 달리 파일 이름 앞에 mod_ 접두사가 붙어서 최종 파일 이름은 mod_<stem>가 됩니다. 이를 통해 각 proto에서 생성된 소스와의 이름 충돌이 방지됩니다.
또한, bindgen 바인딩 모듈과 마찬가지로 라이브러리 속성 전체를 사용하여 라이브러리 컴파일을 제어할 수 있습니다. 단, 속성 전체를 정의하거나 변경해야 하는 경우는 드뭅니다.