Moduli Protobuff

Il sistema di compilazione supporta la generazione di interfacce protobuf tramite il tipo di modulo rust_protobuf .

La generazione del codice protobuf di base viene eseguita con il crate rust-protobuf . Per visualizzare la documentazione su questo utilizzo, vedere la pagina del progetto GitHub con i corrispondenti esempi di protobuf.

Sono supportati anche i protobuf gRPC, con la generazione fornita dal crate grpc-rs . Per visualizzare la documentazione su questo utilizzo, vedere la documentazione nella pagina del progetto gRPC GitHub corrispondente.

Utilizzo di base della build di ruggine_protobuf

Quanto segue fornisce un esempio di definizione di un modulo protobuf e utilizzo di quel modulo come crate. Maggiori dettagli sulle proprietà importanti e su come vengono utilizzate si trovano nella sezione Definizione di un rust_protobuf .

Se è necessario utilizzare il codice generato da protobuf tramite una macro include!() , come per codice di terze parti, vedere la pagina Generatori di sorgenti per un esempio. (L'esempio utilizza un modulo rust_bindgen , ma il mezzo di inclusione del codice sorgente è lo stesso per tutti i generatori di codice sorgente.)

Definire un modulo Rust_protobuf Android.bp

Assumi qualche proto su src/protos/my.proto relativo al tuo Android.bp; il modulo è quindi definito come segue:

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",
}

Una libreria che utilizza questo crate viene definita facendovi riferimento come se fosse qualsiasi altra dipendenza della libreria:

rust_binary {
    name: "hello_rust_proto",
    srcs: ["src/main.rs"],
    rustlibs: ["libmy_proto"],
}

Struttura a cassa dei moduli ruggine_protobuf

Ogni file protobuf è organizzato come un proprio modulo all'interno del crate, prendendo il nome del file protobuf. Ciò significa che tutti i nomi dei file base del prototipo devono essere univoci. Ad esempio, prendi un rust_protobuf definito come segue:

rust_protobuf {
    name: "libfoo",
    crate_name: "foo",
    protos: ["a.proto", "b.proto"],
    grpc_protos: ["c.proto"],
    source_stem: "my_proto_source",
}

È possibile accedere ai diversi prototipi all'interno di questa cassa come segue:

// 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

Notevoli proprietà ruggine_protobuf

Le proprietà definite di seguito sono in aggiunta alle proprietà comuni importanti che si applicano a tutti i moduli. Questi sono particolarmente importanti per i moduli Rust protobuf o mostrano un comportamento unico specifico per il tipo di modulo rust_protobuf .

radice, nome, nome_cassa

rust_protobuf produce varianti della libreria, quindi per queste tre proprietà esistono gli stessi requisiti che esistono per i moduli rust_library . Vedi le proprietà rust_library per i dettagli.

prototipi

Questo è un elenco di percorsi relativi ai file protobuf per generare l'interfaccia protobuf. I nomi dei file di base devono essere univoci tra protos e grpc_protos .

grpc_protos

grpc_protos consiste in un elenco di percorsi relativi ai file protobuf che definiscono grpcs per generare l'interfaccia protobuf. I nomi dei file di base devono essere univoci tra protos e grpc_protos .

radice_origine

source_stem è il nome del file sorgente generato che può essere incluso. Questa è una definizione di campo obbligatoria, anche se stai utilizzando i collegamenti come una cassa, poiché la proprietà stem controlla solo il nome del file di output per le varianti della libreria generate. A differenza di altri generatori di sorgenti, il nome file viene preceduto da mod_ , creando il nome file finale mod_<stem> . Ciò impedisce collisioni di nomi con le fonti generate da ciascun prototipo.

Inoltre, come il modulo bindgen bindgen, è disponibile anche l'insieme completo di proprietà della libreria per controllare la compilazione della libreria, sebbene queste raramente debbano essere definite o modificate.