프로토버프 모듈

빌드 시스템은 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 파일의 상대 경로 목록입니다. 기본 파일 이름은 protosgrpc_protos 간에 고유해야 합니다.

grpc_protos

grpc_protos 는 protobuf 인터페이스를 생성하기 위해 grpcs 를 정의하는 protobuf 파일에 대한 상대 경로 목록으로 구성됩니다. 기본 파일 이름은 protosgrpc_protos 간에 고유해야 합니다.

소스_줄기

source_stem 은 포함될 수 있는 생성된 소스 파일 의 파일 이름입니다. stem 속성은 생성된 라이브러리 변형의 출력 파일 이름만 제어하기 때문에 바인딩을 상자로 사용하는 경우에도 필수 필드 정의입니다. 다른 소스 생성기와 달리 파일 이름에는 mod_ 접두사가 붙고 최종 파일 이름은 mod_<stem> 입니다. 이것은 각 프로토에서 생성된 소스와의 이름 충돌을 방지합니다.

또한 bindgen 바인딩 모듈과 마찬가지로 전체 라이브러리 속성 집합을 사용하여 라이브러리 컴파일을 제어할 수도 있지만 이러한 속성은 정의하거나 변경할 필요가 거의 없습니다.