Add README
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# roto
|
||||
|
||||
Rust protos without the P.
|
||||
|
||||
The codegen is different; we don't create data structures.
|
||||
We mark what where each field is, and only read it when asked.
|
||||
The binary blob is never decompressed by the library; it is your
|
||||
job to figure out how to store the data if you need to access it
|
||||
more than once.
|
||||
|
||||
And building protos? You use a builder. We don't make some fancy
|
||||
structure and give you a marshal function, nah. You give us a blob
|
||||
to write data into, and we write what you tell us, no questions asked.
|
||||
|
||||
### Sample usage
|
||||
|
||||
```rust
|
||||
/*
|
||||
message Hello {
|
||||
string hello_world = 1;
|
||||
message InnerWorld {
|
||||
string thought = 1;
|
||||
}
|
||||
InnerWorld inner_world = 2;
|
||||
}
|
||||
*/
|
||||
|
||||
fn parse_proto(data: &[u8]) -> Result<String> {
|
||||
// Scans the data, marks where each flag is as an offset
|
||||
// into the proto.
|
||||
let accessor = HelloProto::new(accessor)?;
|
||||
// Load the hello world string; returns bytes, not
|
||||
// a Rust string.
|
||||
let hello_world = accessor.hello_world()?;
|
||||
// Inspect a nested message; accessing inner_world scans it
|
||||
// for flag locations and returns a similiar access struct
|
||||
let inner_world = accessor.inner_world()?.thought()?;
|
||||
|
||||
format!("{} is about {}", hello_world, inner_world)
|
||||
}
|
||||
```
|
||||
|
||||
### High level design
|
||||
|
||||
The runtime library offers an iterator over the fields in a message, using the protobuf wire format provide
|
||||
objects of flag and type. Codegen creates a 'wrapper' that iterates over the message, and records the
|
||||
byte offset of each element. Helper methods in the wrapper give the user access to the name fields,
|
||||
casted to the appropriate data type.
|
||||
|
||||
### Literature
|
||||
|
||||
https://protobuf.dev/programming-guides/encoding/
|
||||
Reference in New Issue
Block a user