빌드 시스템은 rust_protobuf
모듈 유형을 통해 protobuf 인터페이스 생성을 지원합니다.
기본 protobuf 코드 생성은 rust-protobuf
크레이트로 수행됩니다. 이 사용법에 대한 문서를 보려면 해당 protobuf 예제 가 있는 GitHub 프로젝트 페이지 를 참조하십시오.
gRPC protobuf도 지원되며 생성은 grpc-rs
크레이트에서 제공됩니다. 이 사용법에 대한 문서를 보려면 해당 gRPC GitHub 프로젝트 페이지 의 문서를 참조하십시오.
기본 Rust_protobuf 빌드 사용법
다음은 protobuf 모듈을 정의하고 해당 모듈을 크레이트로 사용하는 예를 제공합니다. 중요한 속성과 사용 방법에 대한 자세한 내용 은 rust_protobuf
정의 섹션에 있습니다.
타사 코드와 같이 include!()
매크로를 통해 protobuf 생성 코드를 사용해야 하는 경우 소스 생성기 페이지에서 예제를 참조하세요. (예시에서는 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",
}
이 상자 안의 다른 프로토스는 다음과 같이 액세스할 수 있습니다.
// 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
모듈 유형에 고유한 동작을 나타냅니다.
줄기, 이름, crate_name
rust_protobuf
는 라이브러리 변형을 생성하므로 이러한 세 가지 속성에 대한 요구 사항은 rust_library
모듈에 대한 요구 사항과 동일합니다. 자세한 내용은 rust_library
속성을 참조하세요.
프로토스
이것은 protobuf 인터페이스를 생성하기 위한 protobuf 파일의 상대 경로 목록입니다. 기본 파일 이름은 protos
및 grpc_protos
간에 고유해야 합니다.
grpc_protos
grpc_protos
는 protobuf 인터페이스를 생성하기 위해 grpcs
를 정의하는 protobuf 파일에 대한 상대 경로 목록으로 구성됩니다. 기본 파일 이름은 protos
및 grpc_protos
간에 고유해야 합니다.
소스_줄기
source_stem
은 포함될 수 있는 생성된 소스 파일 의 파일 이름입니다. stem
속성은 생성된 라이브러리 변형의 출력 파일 이름만 제어하기 때문에 바인딩을 상자로 사용하는 경우에도 필수 필드 정의입니다. 다른 소스 생성기와 달리 파일 이름에는 mod_ 접두사가 붙고 최종 파일 이름은 mod_<stem> 입니다. 이것은 각 프로토에서 생성된 소스와의 이름 충돌을 방지합니다.
또한 bindgen 바인딩 모듈과 마찬가지로 전체 라이브러리 속성 집합을 사용하여 라이브러리 컴파일을 제어할 수도 있지만 이러한 속성은 정의하거나 변경할 필요가 거의 없습니다.