pub trait ProtoWrite {
// Required method
fn write(&self, pbf: &mut Protobuf);
}
Expand description
The ProtoWrite
trait is used to write a protobuf message.
This crate forces the user to implement this trait in order to write a protobuf message.
§Example
Using OSM File Format BlobHeader as an example:
message BlobHeader {
required string type = 1;
optional bytes indexdata = 2;
required int32 datasize = 3;
}
The user would implement the ProtoWrite
trait for the BlobHeader
struct.
use pbf_core::{ProtoWrite, Protobuf};
struct BlobHeader {
r#type: String,
indexdata: Vec<u8>,
datasize: i32,
}
impl ProtoWrite for BlobHeader {
fn write(&self, pbf: &mut Protobuf) {
pbf.write_string_field(1, &self.r#type);
pbf.write_bytes_field(2, &self.indexdata);
pbf.write_varint_field(3, self.datasize);
}
}
Or let the derive macro do it for you:
ⓘ
use pbf_derive::ProtoWrite;
#[derive(ProtoWrite)]
struct BlobHeader {
#[pbf(tag = 1)]
r#type: String,
indexdata: Vec<u8>,
datasize: i32,
}
Required Methods§
Sourcefn write(&self, pbf: &mut Protobuf)
fn write(&self, pbf: &mut Protobuf)
The write
method is used to write a field to a protobuf message.
The pbf
parameter is used to write the data in the appropriate format.
§Example
Using OSM File Format BlobHeader as an example:
message BlobHeader {
required string type = 1;
optional bytes indexdata = 2;
required int32 datasize = 3;
}
An example write implementation for a BlobHeader
struct:
use pbf_core::{ProtoWrite, Protobuf};
struct BlobHeader {
r#type: String,
indexdata: Vec<u8>,
datasize: i32,
}
impl ProtoWrite for BlobHeader {
fn write(&self, pbf: &mut Protobuf) {
pbf.write_string_field(1, &self.r#type);
pbf.write_bytes_field(2, &self.indexdata);
pbf.write_varint_field(3, self.datasize);
}
}
Or let the derive macro do it for you:
ⓘ
use pbf_derive::ProtoWrite;
#[derive(ProtoWrite)]
struct BlobHeader {
#[pbf(tag = 1)]
r#type: String,
indexdata: Vec<u8>,
datasize: i32,
}