Trait ProtoWrite

Source
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§

Source

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

Implementors§