Files
roto/codegen/src/google/protobuf/descriptor.rs
T

6712 lines
225 KiB
Rust
Raw Normal View History

2026-05-04 22:45:55 -07:00
// @generated by protoc-gen-roto — do not edit
#![allow(unused_imports)]
use roto_runtime::{
ProtoAccessor, ProtoBuilder, RepeatedFieldIterator, Result, RotoError, read_varint,
};
use std::str;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum Edition {
EDITIONUNKNOWN = 0,
EDITIONLEGACY = 900,
EDITIONPROTO2 = 998,
EDITIONPROTO3 = 999,
EDITION2023 = 1000,
EDITION2024 = 1001,
EDITION2026 = 1002,
EDITIONUNSTABLE = 9999,
EDITION1TESTONLY = 1,
EDITION2TESTONLY = 2,
EDITION99997TESTONLY = 99997,
EDITION99998TESTONLY = 99998,
EDITION99999TESTONLY = 99999,
EDITIONMAX = 2147483647,
}
impl Edition {
pub fn from_i32(value: i32) -> Self {
match value {
0 => Edition::EDITIONUNKNOWN,
900 => Edition::EDITIONLEGACY,
998 => Edition::EDITIONPROTO2,
999 => Edition::EDITIONPROTO3,
1000 => Edition::EDITION2023,
1001 => Edition::EDITION2024,
1002 => Edition::EDITION2026,
9999 => Edition::EDITIONUNSTABLE,
1 => Edition::EDITION1TESTONLY,
2 => Edition::EDITION2TESTONLY,
99997 => Edition::EDITION99997TESTONLY,
99998 => Edition::EDITION99998TESTONLY,
99999 => Edition::EDITION99999TESTONLY,
2147483647 => Edition::EDITIONMAX,
_ => Edition::EDITIONUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum SymbolVisibility {
VISIBILITYUNSET = 0,
VISIBILITYLOCAL = 1,
VISIBILITYEXPORT = 2,
}
impl SymbolVisibility {
pub fn from_i32(value: i32) -> Self {
match value {
0 => SymbolVisibility::VISIBILITYUNSET,
1 => SymbolVisibility::VISIBILITYLOCAL,
2 => SymbolVisibility::VISIBILITYEXPORT,
_ => SymbolVisibility::VISIBILITYUNSET,
}
}
}
pub struct FileDescriptorSet<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
file_start: Option<usize>,
file_end: Option<usize>,
}
impl<'a> FileDescriptorSet<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut file_start = None;
let mut file_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if file_start.is_none() {
file_start = Some(offset);
}
file_end = Some(offset);
}
}
Ok(Self {
accessor,
file_start,
file_end,
})
}
pub fn file(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.file_start, self.file_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FileDescriptorSetBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
file_written: bool,
}
impl<'b> FileDescriptorSetBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FileDescriptorSetBuilder<'_> {
FileDescriptorSetBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
file_written: false,
}
}
pub fn file(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(1, value)?;
self.file_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FileDescriptorSet<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.file_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct FileDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
package_offset: Option<usize>,
dependency_start: Option<usize>,
dependency_end: Option<usize>,
public_dependency_start: Option<usize>,
public_dependency_end: Option<usize>,
weak_dependency_start: Option<usize>,
weak_dependency_end: Option<usize>,
option_dependency_start: Option<usize>,
option_dependency_end: Option<usize>,
message_type_start: Option<usize>,
message_type_end: Option<usize>,
enum_type_start: Option<usize>,
enum_type_end: Option<usize>,
service_start: Option<usize>,
service_end: Option<usize>,
extension_start: Option<usize>,
extension_end: Option<usize>,
options_offset: Option<usize>,
source_code_info_offset: Option<usize>,
syntax_offset: Option<usize>,
edition_offset: Option<usize>,
}
impl<'a> FileDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut package_offset = None;
let mut dependency_start = None;
let mut dependency_end = None;
let mut public_dependency_start = None;
let mut public_dependency_end = None;
let mut weak_dependency_start = None;
let mut weak_dependency_end = None;
let mut option_dependency_start = None;
let mut option_dependency_end = None;
let mut message_type_start = None;
let mut message_type_end = None;
let mut enum_type_start = None;
let mut enum_type_end = None;
let mut service_start = None;
let mut service_end = None;
let mut extension_start = None;
let mut extension_end = None;
let mut options_offset = None;
let mut source_code_info_offset = None;
let mut syntax_offset = None;
let mut edition_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
package_offset = Some(offset);
}
if tag.field_number == 3 {
if dependency_start.is_none() {
dependency_start = Some(offset);
}
dependency_end = Some(offset);
}
if tag.field_number == 10 {
if public_dependency_start.is_none() {
public_dependency_start = Some(offset);
}
public_dependency_end = Some(offset);
}
if tag.field_number == 11 {
if weak_dependency_start.is_none() {
weak_dependency_start = Some(offset);
}
weak_dependency_end = Some(offset);
}
if tag.field_number == 15 {
if option_dependency_start.is_none() {
option_dependency_start = Some(offset);
}
option_dependency_end = Some(offset);
}
if tag.field_number == 4 {
if message_type_start.is_none() {
message_type_start = Some(offset);
}
message_type_end = Some(offset);
}
if tag.field_number == 5 {
if enum_type_start.is_none() {
enum_type_start = Some(offset);
}
enum_type_end = Some(offset);
}
if tag.field_number == 6 {
if service_start.is_none() {
service_start = Some(offset);
}
service_end = Some(offset);
}
if tag.field_number == 7 {
if extension_start.is_none() {
extension_start = Some(offset);
}
extension_end = Some(offset);
}
if tag.field_number == 8 {
options_offset = Some(offset);
}
if tag.field_number == 9 {
source_code_info_offset = Some(offset);
}
if tag.field_number == 12 {
syntax_offset = Some(offset);
}
if tag.field_number == 14 {
edition_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
package_offset,
dependency_start,
dependency_end,
public_dependency_start,
public_dependency_end,
weak_dependency_start,
weak_dependency_end,
option_dependency_start,
option_dependency_end,
message_type_start,
message_type_end,
enum_type_start,
enum_type_end,
service_start,
service_end,
extension_start,
extension_end,
options_offset,
source_code_info_offset,
syntax_offset,
edition_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn package(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.package_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn dependency(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.dependency_start, self.dependency_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(3, start, end),
_ => self.accessor.iter_repeated(3),
}
}
pub fn public_dependency(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.public_dependency_start, self.public_dependency_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(10, start, end),
_ => self.accessor.iter_repeated(10),
}
}
pub fn weak_dependency(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.weak_dependency_start, self.weak_dependency_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(11, start, end),
_ => self.accessor.iter_repeated(11),
}
}
pub fn option_dependency(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.option_dependency_start, self.option_dependency_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(15, start, end),
_ => self.accessor.iter_repeated(15),
}
}
pub fn message_type(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.message_type_start, self.message_type_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(4, start, end),
_ => self.accessor.iter_repeated(4),
}
}
pub fn enum_type(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.enum_type_start, self.enum_type_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(5, start, end),
_ => self.accessor.iter_repeated(5),
}
}
pub fn service(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.service_start, self.service_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(6, start, end),
_ => self.accessor.iter_repeated(6),
}
}
pub fn extension(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.extension_start, self.extension_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(7, start, end),
_ => self.accessor.iter_repeated(7),
}
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn source_code_info(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.source_code_info_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn syntax(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.syntax_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn edition(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FileDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
package_written: bool,
dependency_written: bool,
public_dependency_written: bool,
weak_dependency_written: bool,
option_dependency_written: bool,
message_type_written: bool,
enum_type_written: bool,
service_written: bool,
extension_written: bool,
options_written: bool,
source_code_info_written: bool,
syntax_written: bool,
edition_written: bool,
}
impl<'b> FileDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FileDescriptorProtoBuilder<'_> {
FileDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
package_written: false,
dependency_written: false,
public_dependency_written: false,
weak_dependency_written: false,
option_dependency_written: false,
message_type_written: false,
enum_type_written: false,
service_written: false,
extension_written: false,
options_written: false,
source_code_info_written: false,
syntax_written: false,
edition_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn package(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.package_written = true;
Ok(self)
}
pub fn dependency(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.dependency_written = true;
Ok(self)
}
pub fn public_dependency(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(10, value)?;
self.public_dependency_written = true;
Ok(self)
}
pub fn weak_dependency(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(11, value)?;
self.weak_dependency_written = true;
Ok(self)
}
pub fn option_dependency(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(15, value)?;
self.option_dependency_written = true;
Ok(self)
}
pub fn message_type(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.message_type_written = true;
Ok(self)
}
pub fn enum_type(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(5, value)?;
self.enum_type_written = true;
Ok(self)
}
pub fn service(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(6, value)?;
self.service_written = true;
Ok(self)
}
pub fn extension(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(7, value)?;
self.extension_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(8, value)?;
self.options_written = true;
Ok(self)
}
pub fn source_code_info(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(9, value)?;
self.source_code_info_written = true;
Ok(self)
}
pub fn syntax(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(12, value)?;
self.syntax_written = true;
Ok(self)
}
pub fn edition(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(14, value)?;
self.edition_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FileDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.package_written,
3 => self.dependency_written,
10 => self.public_dependency_written,
11 => self.weak_dependency_written,
15 => self.option_dependency_written,
4 => self.message_type_written,
5 => self.enum_type_written,
6 => self.service_written,
7 => self.extension_written,
8 => self.options_written,
9 => self.source_code_info_written,
12 => self.syntax_written,
14 => self.edition_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct DescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
field_start: Option<usize>,
field_end: Option<usize>,
extension_start: Option<usize>,
extension_end: Option<usize>,
nested_type_start: Option<usize>,
nested_type_end: Option<usize>,
enum_type_start: Option<usize>,
enum_type_end: Option<usize>,
extension_range_start: Option<usize>,
extension_range_end: Option<usize>,
oneof_decl_start: Option<usize>,
oneof_decl_end: Option<usize>,
options_offset: Option<usize>,
reserved_range_start: Option<usize>,
reserved_range_end: Option<usize>,
reserved_name_start: Option<usize>,
reserved_name_end: Option<usize>,
visibility_offset: Option<usize>,
}
impl<'a> DescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut field_start = None;
let mut field_end = None;
let mut extension_start = None;
let mut extension_end = None;
let mut nested_type_start = None;
let mut nested_type_end = None;
let mut enum_type_start = None;
let mut enum_type_end = None;
let mut extension_range_start = None;
let mut extension_range_end = None;
let mut oneof_decl_start = None;
let mut oneof_decl_end = None;
let mut options_offset = None;
let mut reserved_range_start = None;
let mut reserved_range_end = None;
let mut reserved_name_start = None;
let mut reserved_name_end = None;
let mut visibility_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
if field_start.is_none() {
field_start = Some(offset);
}
field_end = Some(offset);
}
if tag.field_number == 6 {
if extension_start.is_none() {
extension_start = Some(offset);
}
extension_end = Some(offset);
}
if tag.field_number == 3 {
if nested_type_start.is_none() {
nested_type_start = Some(offset);
}
nested_type_end = Some(offset);
}
if tag.field_number == 4 {
if enum_type_start.is_none() {
enum_type_start = Some(offset);
}
enum_type_end = Some(offset);
}
if tag.field_number == 5 {
if extension_range_start.is_none() {
extension_range_start = Some(offset);
}
extension_range_end = Some(offset);
}
if tag.field_number == 8 {
if oneof_decl_start.is_none() {
oneof_decl_start = Some(offset);
}
oneof_decl_end = Some(offset);
}
if tag.field_number == 7 {
options_offset = Some(offset);
}
if tag.field_number == 9 {
if reserved_range_start.is_none() {
reserved_range_start = Some(offset);
}
reserved_range_end = Some(offset);
}
if tag.field_number == 10 {
if reserved_name_start.is_none() {
reserved_name_start = Some(offset);
}
reserved_name_end = Some(offset);
}
if tag.field_number == 11 {
visibility_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
field_start,
field_end,
extension_start,
extension_end,
nested_type_start,
nested_type_end,
enum_type_start,
enum_type_end,
extension_range_start,
extension_range_end,
oneof_decl_start,
oneof_decl_end,
options_offset,
reserved_range_start,
reserved_range_end,
reserved_name_start,
reserved_name_end,
visibility_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn field(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.field_start, self.field_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn extension(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.extension_start, self.extension_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(6, start, end),
_ => self.accessor.iter_repeated(6),
}
}
pub fn nested_type(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.nested_type_start, self.nested_type_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(3, start, end),
_ => self.accessor.iter_repeated(3),
}
}
pub fn enum_type(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.enum_type_start, self.enum_type_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(4, start, end),
_ => self.accessor.iter_repeated(4),
}
}
pub fn extension_range(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.extension_range_start, self.extension_range_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(5, start, end),
_ => self.accessor.iter_repeated(5),
}
}
pub fn oneof_decl(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.oneof_decl_start, self.oneof_decl_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(8, start, end),
_ => self.accessor.iter_repeated(8),
}
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn reserved_range(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.reserved_range_start, self.reserved_range_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(9, start, end),
_ => self.accessor.iter_repeated(9),
}
}
pub fn reserved_name(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.reserved_name_start, self.reserved_name_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(10, start, end),
_ => self.accessor.iter_repeated(10),
}
}
pub fn visibility(&self) -> roto_runtime::Result<u64> {
let offset = self
.visibility_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct DescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
field_written: bool,
extension_written: bool,
nested_type_written: bool,
enum_type_written: bool,
extension_range_written: bool,
oneof_decl_written: bool,
options_written: bool,
reserved_range_written: bool,
reserved_name_written: bool,
visibility_written: bool,
}
impl<'b> DescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> DescriptorProtoBuilder<'_> {
DescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
field_written: false,
extension_written: false,
nested_type_written: false,
enum_type_written: false,
extension_range_written: false,
oneof_decl_written: false,
options_written: false,
reserved_range_written: false,
reserved_name_written: false,
visibility_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn field(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.field_written = true;
Ok(self)
}
pub fn extension(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(6, value)?;
self.extension_written = true;
Ok(self)
}
pub fn nested_type(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(3, value)?;
self.nested_type_written = true;
Ok(self)
}
pub fn enum_type(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.enum_type_written = true;
Ok(self)
}
pub fn extension_range(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(5, value)?;
self.extension_range_written = true;
Ok(self)
}
pub fn oneof_decl(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(8, value)?;
self.oneof_decl_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(7, value)?;
self.options_written = true;
Ok(self)
}
pub fn reserved_range(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(9, value)?;
self.reserved_range_written = true;
Ok(self)
}
pub fn reserved_name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(10, value)?;
self.reserved_name_written = true;
Ok(self)
}
pub fn visibility(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(11, value)?;
self.visibility_written = true;
Ok(self)
}
pub fn with(mut self, msg: &DescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.field_written,
6 => self.extension_written,
3 => self.nested_type_written,
4 => self.enum_type_written,
5 => self.extension_range_written,
8 => self.oneof_decl_written,
7 => self.options_written,
9 => self.reserved_range_written,
10 => self.reserved_name_written,
11 => self.visibility_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod descriptor_proto {
pub struct ExtensionRange<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
start_offset: Option<usize>,
end_offset: Option<usize>,
options_offset: Option<usize>,
}
impl<'a> ExtensionRange<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut start_offset = None;
let mut end_offset = None;
let mut options_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
start_offset = Some(offset);
}
if tag.field_number == 2 {
end_offset = Some(offset);
}
if tag.field_number == 3 {
options_offset = Some(offset);
}
}
Ok(Self {
accessor,
start_offset,
end_offset,
options_offset,
})
}
pub fn start(&self) -> roto_runtime::Result<i32> {
let offset = self
.start_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn end(&self) -> roto_runtime::Result<i32> {
let offset = self
.end_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ExtensionRangeBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
start_written: bool,
end_written: bool,
options_written: bool,
}
impl<'b> ExtensionRangeBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ExtensionRangeBuilder<'_> {
ExtensionRangeBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
start_written: false,
end_written: false,
options_written: false,
}
}
pub fn start(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.start_written = true;
Ok(self)
}
pub fn end(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(2, value)?;
self.end_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(3, value)?;
self.options_written = true;
Ok(self)
}
pub fn with(mut self, msg: &ExtensionRange<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.start_written,
2 => self.end_written,
3 => self.options_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct ReservedRange<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
start_offset: Option<usize>,
end_offset: Option<usize>,
}
impl<'a> ReservedRange<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut start_offset = None;
let mut end_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
start_offset = Some(offset);
}
if tag.field_number == 2 {
end_offset = Some(offset);
}
}
Ok(Self {
accessor,
start_offset,
end_offset,
})
}
pub fn start(&self) -> roto_runtime::Result<i32> {
let offset = self
.start_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn end(&self) -> roto_runtime::Result<i32> {
let offset = self
.end_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ReservedRangeBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
start_written: bool,
end_written: bool,
}
impl<'b> ReservedRangeBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ReservedRangeBuilder<'_> {
ReservedRangeBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
start_written: false,
end_written: false,
}
}
pub fn start(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.start_written = true;
Ok(self)
}
pub fn end(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(2, value)?;
self.end_written = true;
Ok(self)
}
pub fn with(mut self, msg: &ReservedRange<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.start_written,
2 => self.end_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct ExtensionRangeOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
declaration_start: Option<usize>,
declaration_end: Option<usize>,
features_offset: Option<usize>,
verification_offset: Option<usize>,
}
impl<'a> ExtensionRangeOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
let mut declaration_start = None;
let mut declaration_end = None;
let mut features_offset = None;
let mut verification_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
if tag.field_number == 2 {
if declaration_start.is_none() {
declaration_start = Some(offset);
}
declaration_end = Some(offset);
}
if tag.field_number == 50 {
features_offset = Some(offset);
}
if tag.field_number == 3 {
verification_offset = Some(offset);
}
}
Ok(Self {
accessor,
uninterpreted_option_start,
uninterpreted_option_end,
declaration_start,
declaration_end,
features_offset,
verification_offset,
})
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn declaration(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.declaration_start, self.declaration_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn verification(&self) -> roto_runtime::Result<u64> {
let offset = self
.verification_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ExtensionRangeOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
uninterpreted_option_written: bool,
declaration_written: bool,
features_written: bool,
verification_written: bool,
}
impl<'b> ExtensionRangeOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ExtensionRangeOptionsBuilder<'_> {
ExtensionRangeOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
uninterpreted_option_written: false,
declaration_written: false,
features_written: false,
verification_written: false,
}
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn declaration(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.declaration_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(50, value)?;
self.features_written = true;
Ok(self)
}
pub fn verification(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.verification_written = true;
Ok(self)
}
pub fn with(mut self, msg: &ExtensionRangeOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
999 => self.uninterpreted_option_written,
2 => self.declaration_written,
50 => self.features_written,
3 => self.verification_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod extension_range_options {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum VerificationState {
DECLARATION = 0,
UNVERIFIED = 1,
}
impl VerificationState {
pub fn from_i32(value: i32) -> Self {
match value {
0 => VerificationState::DECLARATION,
1 => VerificationState::UNVERIFIED,
_ => VerificationState::DECLARATION,
}
}
}
pub struct Declaration<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
number_offset: Option<usize>,
full_name_offset: Option<usize>,
type_offset: Option<usize>,
reserved_offset: Option<usize>,
repeated_offset: Option<usize>,
}
impl<'a> Declaration<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut number_offset = None;
let mut full_name_offset = None;
let mut type_offset = None;
let mut reserved_offset = None;
let mut repeated_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
number_offset = Some(offset);
}
if tag.field_number == 2 {
full_name_offset = Some(offset);
}
if tag.field_number == 3 {
type_offset = Some(offset);
}
if tag.field_number == 5 {
reserved_offset = Some(offset);
}
if tag.field_number == 6 {
repeated_offset = Some(offset);
}
}
Ok(Self {
accessor,
number_offset,
full_name_offset,
type_offset,
reserved_offset,
repeated_offset,
})
}
pub fn number(&self) -> roto_runtime::Result<i32> {
let offset = self
.number_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn full_name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.full_name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn r#type(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.type_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn reserved(&self) -> roto_runtime::Result<bool> {
let offset = self
.reserved_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn repeated(&self) -> roto_runtime::Result<bool> {
let offset = self
.repeated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct DeclarationBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
number_written: bool,
full_name_written: bool,
type_written: bool,
reserved_written: bool,
repeated_written: bool,
}
impl<'b> DeclarationBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> DeclarationBuilder<'_> {
DeclarationBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
number_written: false,
full_name_written: false,
type_written: false,
reserved_written: false,
repeated_written: false,
}
}
pub fn number(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.number_written = true;
Ok(self)
}
pub fn full_name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.full_name_written = true;
Ok(self)
}
pub fn r#type(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.type_written = true;
Ok(self)
}
pub fn reserved(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.reserved_written = true;
Ok(self)
}
pub fn repeated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.repeated_written = true;
Ok(self)
}
pub fn with(mut self, msg: &Declaration<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.number_written,
2 => self.full_name_written,
3 => self.type_written,
5 => self.reserved_written,
6 => self.repeated_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct FieldDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
number_offset: Option<usize>,
label_offset: Option<usize>,
type_offset: Option<usize>,
type_name_offset: Option<usize>,
extendee_offset: Option<usize>,
default_value_offset: Option<usize>,
oneof_index_offset: Option<usize>,
json_name_offset: Option<usize>,
options_offset: Option<usize>,
proto3_optional_offset: Option<usize>,
}
impl<'a> FieldDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut number_offset = None;
let mut label_offset = None;
let mut type_offset = None;
let mut type_name_offset = None;
let mut extendee_offset = None;
let mut default_value_offset = None;
let mut oneof_index_offset = None;
let mut json_name_offset = None;
let mut options_offset = None;
let mut proto3_optional_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 3 {
number_offset = Some(offset);
}
if tag.field_number == 4 {
label_offset = Some(offset);
}
if tag.field_number == 5 {
type_offset = Some(offset);
}
if tag.field_number == 6 {
type_name_offset = Some(offset);
}
if tag.field_number == 2 {
extendee_offset = Some(offset);
}
if tag.field_number == 7 {
default_value_offset = Some(offset);
}
if tag.field_number == 9 {
oneof_index_offset = Some(offset);
}
if tag.field_number == 10 {
json_name_offset = Some(offset);
}
if tag.field_number == 8 {
options_offset = Some(offset);
}
if tag.field_number == 17 {
proto3_optional_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
number_offset,
label_offset,
type_offset,
type_name_offset,
extendee_offset,
default_value_offset,
oneof_index_offset,
json_name_offset,
options_offset,
proto3_optional_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn number(&self) -> roto_runtime::Result<i32> {
let offset = self
.number_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn label(&self) -> roto_runtime::Result<u64> {
let offset = self
.label_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn r#type(&self) -> roto_runtime::Result<u64> {
let offset = self
.type_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn type_name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.type_name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn extendee(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.extendee_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn default_value(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.default_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn oneof_index(&self) -> roto_runtime::Result<i32> {
let offset = self
.oneof_index_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn json_name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.json_name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn proto3_optional(&self) -> roto_runtime::Result<bool> {
let offset = self
.proto3_optional_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FieldDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
number_written: bool,
label_written: bool,
type_written: bool,
type_name_written: bool,
extendee_written: bool,
default_value_written: bool,
oneof_index_written: bool,
json_name_written: bool,
options_written: bool,
proto3_optional_written: bool,
}
impl<'b> FieldDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FieldDescriptorProtoBuilder<'_> {
FieldDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
number_written: false,
label_written: false,
type_written: false,
type_name_written: false,
extendee_written: false,
default_value_written: false,
oneof_index_written: false,
json_name_written: false,
options_written: false,
proto3_optional_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn number(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(3, value)?;
self.number_written = true;
Ok(self)
}
pub fn label(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(4, value)?;
self.label_written = true;
Ok(self)
}
pub fn r#type(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.type_written = true;
Ok(self)
}
pub fn type_name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(6, value)?;
self.type_name_written = true;
Ok(self)
}
pub fn extendee(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.extendee_written = true;
Ok(self)
}
pub fn default_value(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(7, value)?;
self.default_value_written = true;
Ok(self)
}
pub fn oneof_index(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(9, value)?;
self.oneof_index_written = true;
Ok(self)
}
pub fn json_name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(10, value)?;
self.json_name_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(8, value)?;
self.options_written = true;
Ok(self)
}
pub fn proto3_optional(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(17, value)?;
self.proto3_optional_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FieldDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
3 => self.number_written,
4 => self.label_written,
5 => self.type_written,
6 => self.type_name_written,
2 => self.extendee_written,
7 => self.default_value_written,
9 => self.oneof_index_written,
10 => self.json_name_written,
8 => self.options_written,
17 => self.proto3_optional_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod field_descriptor_proto {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum Type {
TYPEDOUBLE = 1,
TYPEFLOAT = 2,
TYPEINT64 = 3,
TYPEUINT64 = 4,
TYPEINT32 = 5,
TYPEFIXED64 = 6,
TYPEFIXED32 = 7,
TYPEBOOL = 8,
TYPESTRING = 9,
TYPEGROUP = 10,
TYPEMESSAGE = 11,
TYPEBYTES = 12,
TYPEUINT32 = 13,
TYPEENUM = 14,
TYPESFIXED32 = 15,
TYPESFIXED64 = 16,
TYPESINT32 = 17,
TYPESINT64 = 18,
Unknown = 0,
}
impl Type {
pub fn from_i32(value: i32) -> Self {
match value {
1 => Type::TYPEDOUBLE,
2 => Type::TYPEFLOAT,
3 => Type::TYPEINT64,
4 => Type::TYPEUINT64,
5 => Type::TYPEINT32,
6 => Type::TYPEFIXED64,
7 => Type::TYPEFIXED32,
8 => Type::TYPEBOOL,
9 => Type::TYPESTRING,
10 => Type::TYPEGROUP,
11 => Type::TYPEMESSAGE,
12 => Type::TYPEBYTES,
13 => Type::TYPEUINT32,
14 => Type::TYPEENUM,
15 => Type::TYPESFIXED32,
16 => Type::TYPESFIXED64,
17 => Type::TYPESINT32,
18 => Type::TYPESINT64,
_ => Type::Unknown,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum Label {
LABELOPTIONAL = 1,
LABELREPEATED = 3,
LABELREQUIRED = 2,
Unknown = 0,
}
impl Label {
pub fn from_i32(value: i32) -> Self {
match value {
1 => Label::LABELOPTIONAL,
3 => Label::LABELREPEATED,
2 => Label::LABELREQUIRED,
_ => Label::Unknown,
}
}
}
}
pub struct OneofDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
options_offset: Option<usize>,
}
impl<'a> OneofDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut options_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
options_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
options_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct OneofDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
options_written: bool,
}
impl<'b> OneofDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> OneofDescriptorProtoBuilder<'_> {
OneofDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
options_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.options_written = true;
Ok(self)
}
pub fn with(mut self, msg: &OneofDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.options_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct EnumDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
value_start: Option<usize>,
value_end: Option<usize>,
options_offset: Option<usize>,
reserved_range_start: Option<usize>,
reserved_range_end: Option<usize>,
reserved_name_start: Option<usize>,
reserved_name_end: Option<usize>,
visibility_offset: Option<usize>,
}
impl<'a> EnumDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut value_start = None;
let mut value_end = None;
let mut options_offset = None;
let mut reserved_range_start = None;
let mut reserved_range_end = None;
let mut reserved_name_start = None;
let mut reserved_name_end = None;
let mut visibility_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
if value_start.is_none() {
value_start = Some(offset);
}
value_end = Some(offset);
}
if tag.field_number == 3 {
options_offset = Some(offset);
}
if tag.field_number == 4 {
if reserved_range_start.is_none() {
reserved_range_start = Some(offset);
}
reserved_range_end = Some(offset);
}
if tag.field_number == 5 {
if reserved_name_start.is_none() {
reserved_name_start = Some(offset);
}
reserved_name_end = Some(offset);
}
if tag.field_number == 6 {
visibility_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
value_start,
value_end,
options_offset,
reserved_range_start,
reserved_range_end,
reserved_name_start,
reserved_name_end,
visibility_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn value(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.value_start, self.value_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn reserved_range(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.reserved_range_start, self.reserved_range_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(4, start, end),
_ => self.accessor.iter_repeated(4),
}
}
pub fn reserved_name(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.reserved_name_start, self.reserved_name_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(5, start, end),
_ => self.accessor.iter_repeated(5),
}
}
pub fn visibility(&self) -> roto_runtime::Result<u64> {
let offset = self
.visibility_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EnumDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
value_written: bool,
options_written: bool,
reserved_range_written: bool,
reserved_name_written: bool,
visibility_written: bool,
}
impl<'b> EnumDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EnumDescriptorProtoBuilder<'_> {
EnumDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
value_written: false,
options_written: false,
reserved_range_written: false,
reserved_name_written: false,
visibility_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn value(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.value_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(3, value)?;
self.options_written = true;
Ok(self)
}
pub fn reserved_range(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.reserved_range_written = true;
Ok(self)
}
pub fn reserved_name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(5, value)?;
self.reserved_name_written = true;
Ok(self)
}
pub fn visibility(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.visibility_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EnumDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.value_written,
3 => self.options_written,
4 => self.reserved_range_written,
5 => self.reserved_name_written,
6 => self.visibility_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod enum_descriptor_proto {
pub struct EnumReservedRange<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
start_offset: Option<usize>,
end_offset: Option<usize>,
}
impl<'a> EnumReservedRange<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut start_offset = None;
let mut end_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
start_offset = Some(offset);
}
if tag.field_number == 2 {
end_offset = Some(offset);
}
}
Ok(Self {
accessor,
start_offset,
end_offset,
})
}
pub fn start(&self) -> roto_runtime::Result<i32> {
let offset = self
.start_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn end(&self) -> roto_runtime::Result<i32> {
let offset = self
.end_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EnumReservedRangeBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
start_written: bool,
end_written: bool,
}
impl<'b> EnumReservedRangeBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EnumReservedRangeBuilder<'_> {
EnumReservedRangeBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
start_written: false,
end_written: false,
}
}
pub fn start(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.start_written = true;
Ok(self)
}
pub fn end(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(2, value)?;
self.end_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EnumReservedRange<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.start_written,
2 => self.end_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct EnumValueDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
number_offset: Option<usize>,
options_offset: Option<usize>,
}
impl<'a> EnumValueDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut number_offset = None;
let mut options_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
number_offset = Some(offset);
}
if tag.field_number == 3 {
options_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
number_offset,
options_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn number(&self) -> roto_runtime::Result<i32> {
let offset = self
.number_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EnumValueDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
number_written: bool,
options_written: bool,
}
impl<'b> EnumValueDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EnumValueDescriptorProtoBuilder<'_> {
EnumValueDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
number_written: false,
options_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn number(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(2, value)?;
self.number_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(3, value)?;
self.options_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EnumValueDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.number_written,
3 => self.options_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct ServiceDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
method_start: Option<usize>,
method_end: Option<usize>,
options_offset: Option<usize>,
}
impl<'a> ServiceDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut method_start = None;
let mut method_end = None;
let mut options_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
if method_start.is_none() {
method_start = Some(offset);
}
method_end = Some(offset);
}
if tag.field_number == 3 {
options_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
method_start,
method_end,
options_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn method(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.method_start, self.method_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ServiceDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
method_written: bool,
options_written: bool,
}
impl<'b> ServiceDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ServiceDescriptorProtoBuilder<'_> {
ServiceDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
method_written: false,
options_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn method(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.method_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(3, value)?;
self.options_written = true;
Ok(self)
}
pub fn with(mut self, msg: &ServiceDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.method_written,
3 => self.options_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct MethodDescriptorProto<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_offset: Option<usize>,
input_type_offset: Option<usize>,
output_type_offset: Option<usize>,
options_offset: Option<usize>,
client_streaming_offset: Option<usize>,
server_streaming_offset: Option<usize>,
}
impl<'a> MethodDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_offset = None;
let mut input_type_offset = None;
let mut output_type_offset = None;
let mut options_offset = None;
let mut client_streaming_offset = None;
let mut server_streaming_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_offset = Some(offset);
}
if tag.field_number == 2 {
input_type_offset = Some(offset);
}
if tag.field_number == 3 {
output_type_offset = Some(offset);
}
if tag.field_number == 4 {
options_offset = Some(offset);
}
if tag.field_number == 5 {
client_streaming_offset = Some(offset);
}
if tag.field_number == 6 {
server_streaming_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_offset,
input_type_offset,
output_type_offset,
options_offset,
client_streaming_offset,
server_streaming_offset,
})
}
pub fn name(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn input_type(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.input_type_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn output_type(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.output_type_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn options(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.options_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn client_streaming(&self) -> roto_runtime::Result<bool> {
let offset = self
.client_streaming_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn server_streaming(&self) -> roto_runtime::Result<bool> {
let offset = self
.server_streaming_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct MethodDescriptorProtoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
input_type_written: bool,
output_type_written: bool,
options_written: bool,
client_streaming_written: bool,
server_streaming_written: bool,
}
impl<'b> MethodDescriptorProtoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> MethodDescriptorProtoBuilder<'_> {
MethodDescriptorProtoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
input_type_written: false,
output_type_written: false,
options_written: false,
client_streaming_written: false,
server_streaming_written: false,
}
}
pub fn name(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_written = true;
Ok(self)
}
pub fn input_type(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.input_type_written = true;
Ok(self)
}
pub fn output_type(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.output_type_written = true;
Ok(self)
}
pub fn options(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.options_written = true;
Ok(self)
}
pub fn client_streaming(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.client_streaming_written = true;
Ok(self)
}
pub fn server_streaming(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.server_streaming_written = true;
Ok(self)
}
pub fn with(mut self, msg: &MethodDescriptorProto<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_written,
2 => self.input_type_written,
3 => self.output_type_written,
4 => self.options_written,
5 => self.client_streaming_written,
6 => self.server_streaming_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct FileOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
java_package_offset: Option<usize>,
java_outer_classname_offset: Option<usize>,
java_multiple_files_offset: Option<usize>,
java_generate_equals_and_hash_offset: Option<usize>,
java_string_check_utf8_offset: Option<usize>,
optimize_for_offset: Option<usize>,
go_package_offset: Option<usize>,
cc_generic_services_offset: Option<usize>,
java_generic_services_offset: Option<usize>,
py_generic_services_offset: Option<usize>,
deprecated_offset: Option<usize>,
cc_enable_arenas_offset: Option<usize>,
objc_class_prefix_offset: Option<usize>,
csharp_namespace_offset: Option<usize>,
swift_prefix_offset: Option<usize>,
php_class_prefix_offset: Option<usize>,
php_namespace_offset: Option<usize>,
php_metadata_namespace_offset: Option<usize>,
ruby_package_offset: Option<usize>,
features_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> FileOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut java_package_offset = None;
let mut java_outer_classname_offset = None;
let mut java_multiple_files_offset = None;
let mut java_generate_equals_and_hash_offset = None;
let mut java_string_check_utf8_offset = None;
let mut optimize_for_offset = None;
let mut go_package_offset = None;
let mut cc_generic_services_offset = None;
let mut java_generic_services_offset = None;
let mut py_generic_services_offset = None;
let mut deprecated_offset = None;
let mut cc_enable_arenas_offset = None;
let mut objc_class_prefix_offset = None;
let mut csharp_namespace_offset = None;
let mut swift_prefix_offset = None;
let mut php_class_prefix_offset = None;
let mut php_namespace_offset = None;
let mut php_metadata_namespace_offset = None;
let mut ruby_package_offset = None;
let mut features_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
java_package_offset = Some(offset);
}
if tag.field_number == 8 {
java_outer_classname_offset = Some(offset);
}
if tag.field_number == 10 {
java_multiple_files_offset = Some(offset);
}
if tag.field_number == 20 {
java_generate_equals_and_hash_offset = Some(offset);
}
if tag.field_number == 27 {
java_string_check_utf8_offset = Some(offset);
}
if tag.field_number == 9 {
optimize_for_offset = Some(offset);
}
if tag.field_number == 11 {
go_package_offset = Some(offset);
}
if tag.field_number == 16 {
cc_generic_services_offset = Some(offset);
}
if tag.field_number == 17 {
java_generic_services_offset = Some(offset);
}
if tag.field_number == 18 {
py_generic_services_offset = Some(offset);
}
if tag.field_number == 23 {
deprecated_offset = Some(offset);
}
if tag.field_number == 31 {
cc_enable_arenas_offset = Some(offset);
}
if tag.field_number == 36 {
objc_class_prefix_offset = Some(offset);
}
if tag.field_number == 37 {
csharp_namespace_offset = Some(offset);
}
if tag.field_number == 39 {
swift_prefix_offset = Some(offset);
}
if tag.field_number == 40 {
php_class_prefix_offset = Some(offset);
}
if tag.field_number == 41 {
php_namespace_offset = Some(offset);
}
if tag.field_number == 44 {
php_metadata_namespace_offset = Some(offset);
}
if tag.field_number == 45 {
ruby_package_offset = Some(offset);
}
if tag.field_number == 50 {
features_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
java_package_offset,
java_outer_classname_offset,
java_multiple_files_offset,
java_generate_equals_and_hash_offset,
java_string_check_utf8_offset,
optimize_for_offset,
go_package_offset,
cc_generic_services_offset,
java_generic_services_offset,
py_generic_services_offset,
deprecated_offset,
cc_enable_arenas_offset,
objc_class_prefix_offset,
csharp_namespace_offset,
swift_prefix_offset,
php_class_prefix_offset,
php_namespace_offset,
php_metadata_namespace_offset,
ruby_package_offset,
features_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn java_package(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.java_package_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn java_outer_classname(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.java_outer_classname_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn java_multiple_files(&self) -> roto_runtime::Result<bool> {
let offset = self
.java_multiple_files_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn java_generate_equals_and_hash(&self) -> roto_runtime::Result<bool> {
let offset = self
.java_generate_equals_and_hash_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn java_string_check_utf8(&self) -> roto_runtime::Result<bool> {
let offset = self
.java_string_check_utf8_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn optimize_for(&self) -> roto_runtime::Result<u64> {
let offset = self
.optimize_for_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn go_package(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.go_package_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn cc_generic_services(&self) -> roto_runtime::Result<bool> {
let offset = self
.cc_generic_services_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn java_generic_services(&self) -> roto_runtime::Result<bool> {
let offset = self
.java_generic_services_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn py_generic_services(&self) -> roto_runtime::Result<bool> {
let offset = self
.py_generic_services_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn cc_enable_arenas(&self) -> roto_runtime::Result<bool> {
let offset = self
.cc_enable_arenas_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn objc_class_prefix(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.objc_class_prefix_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn csharp_namespace(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.csharp_namespace_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn swift_prefix(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.swift_prefix_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn php_class_prefix(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.php_class_prefix_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn php_namespace(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.php_namespace_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn php_metadata_namespace(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.php_metadata_namespace_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn ruby_package(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.ruby_package_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FileOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
java_package_written: bool,
java_outer_classname_written: bool,
java_multiple_files_written: bool,
java_generate_equals_and_hash_written: bool,
java_string_check_utf8_written: bool,
optimize_for_written: bool,
go_package_written: bool,
cc_generic_services_written: bool,
java_generic_services_written: bool,
py_generic_services_written: bool,
deprecated_written: bool,
cc_enable_arenas_written: bool,
objc_class_prefix_written: bool,
csharp_namespace_written: bool,
swift_prefix_written: bool,
php_class_prefix_written: bool,
php_namespace_written: bool,
php_metadata_namespace_written: bool,
ruby_package_written: bool,
features_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> FileOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FileOptionsBuilder<'_> {
FileOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
java_package_written: false,
java_outer_classname_written: false,
java_multiple_files_written: false,
java_generate_equals_and_hash_written: false,
java_string_check_utf8_written: false,
optimize_for_written: false,
go_package_written: false,
cc_generic_services_written: false,
java_generic_services_written: false,
py_generic_services_written: false,
deprecated_written: false,
cc_enable_arenas_written: false,
objc_class_prefix_written: false,
csharp_namespace_written: false,
swift_prefix_written: false,
php_class_prefix_written: false,
php_namespace_written: false,
php_metadata_namespace_written: false,
ruby_package_written: false,
features_written: false,
uninterpreted_option_written: false,
}
}
pub fn java_package(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.java_package_written = true;
Ok(self)
}
pub fn java_outer_classname(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(8, value)?;
self.java_outer_classname_written = true;
Ok(self)
}
pub fn java_multiple_files(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(10, value)?;
self.java_multiple_files_written = true;
Ok(self)
}
pub fn java_generate_equals_and_hash(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(20, value)?;
self.java_generate_equals_and_hash_written = true;
Ok(self)
}
pub fn java_string_check_utf8(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(27, value)?;
self.java_string_check_utf8_written = true;
Ok(self)
}
pub fn optimize_for(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(9, value)?;
self.optimize_for_written = true;
Ok(self)
}
pub fn go_package(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(11, value)?;
self.go_package_written = true;
Ok(self)
}
pub fn cc_generic_services(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(16, value)?;
self.cc_generic_services_written = true;
Ok(self)
}
pub fn java_generic_services(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(17, value)?;
self.java_generic_services_written = true;
Ok(self)
}
pub fn py_generic_services(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(18, value)?;
self.py_generic_services_written = true;
Ok(self)
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(23, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn cc_enable_arenas(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(31, value)?;
self.cc_enable_arenas_written = true;
Ok(self)
}
pub fn objc_class_prefix(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(36, value)?;
self.objc_class_prefix_written = true;
Ok(self)
}
pub fn csharp_namespace(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(37, value)?;
self.csharp_namespace_written = true;
Ok(self)
}
pub fn swift_prefix(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(39, value)?;
self.swift_prefix_written = true;
Ok(self)
}
pub fn php_class_prefix(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(40, value)?;
self.php_class_prefix_written = true;
Ok(self)
}
pub fn php_namespace(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(41, value)?;
self.php_namespace_written = true;
Ok(self)
}
pub fn php_metadata_namespace(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(44, value)?;
self.php_metadata_namespace_written = true;
Ok(self)
}
pub fn ruby_package(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(45, value)?;
self.ruby_package_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(50, value)?;
self.features_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FileOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.java_package_written,
8 => self.java_outer_classname_written,
10 => self.java_multiple_files_written,
20 => self.java_generate_equals_and_hash_written,
27 => self.java_string_check_utf8_written,
9 => self.optimize_for_written,
11 => self.go_package_written,
16 => self.cc_generic_services_written,
17 => self.java_generic_services_written,
18 => self.py_generic_services_written,
23 => self.deprecated_written,
31 => self.cc_enable_arenas_written,
36 => self.objc_class_prefix_written,
37 => self.csharp_namespace_written,
39 => self.swift_prefix_written,
40 => self.php_class_prefix_written,
41 => self.php_namespace_written,
44 => self.php_metadata_namespace_written,
45 => self.ruby_package_written,
50 => self.features_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod file_options {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum OptimizeMode {
SPEED = 1,
CODESIZE = 2,
LITERUNTIME = 3,
Unknown = 0,
}
impl OptimizeMode {
pub fn from_i32(value: i32) -> Self {
match value {
1 => OptimizeMode::SPEED,
2 => OptimizeMode::CODESIZE,
3 => OptimizeMode::LITERUNTIME,
_ => OptimizeMode::Unknown,
}
}
}
}
pub struct MessageOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
message_set_wire_format_offset: Option<usize>,
no_standard_descriptor_accessor_offset: Option<usize>,
deprecated_offset: Option<usize>,
map_entry_offset: Option<usize>,
deprecated_legacy_json_field_conflicts_offset: Option<usize>,
features_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> MessageOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut message_set_wire_format_offset = None;
let mut no_standard_descriptor_accessor_offset = None;
let mut deprecated_offset = None;
let mut map_entry_offset = None;
let mut deprecated_legacy_json_field_conflicts_offset = None;
let mut features_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
message_set_wire_format_offset = Some(offset);
}
if tag.field_number == 2 {
no_standard_descriptor_accessor_offset = Some(offset);
}
if tag.field_number == 3 {
deprecated_offset = Some(offset);
}
if tag.field_number == 7 {
map_entry_offset = Some(offset);
}
if tag.field_number == 11 {
deprecated_legacy_json_field_conflicts_offset = Some(offset);
}
if tag.field_number == 12 {
features_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
message_set_wire_format_offset,
no_standard_descriptor_accessor_offset,
deprecated_offset,
map_entry_offset,
deprecated_legacy_json_field_conflicts_offset,
features_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn message_set_wire_format(&self) -> roto_runtime::Result<bool> {
let offset = self
.message_set_wire_format_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn no_standard_descriptor_accessor(&self) -> roto_runtime::Result<bool> {
let offset = self
.no_standard_descriptor_accessor_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn map_entry(&self) -> roto_runtime::Result<bool> {
let offset = self
.map_entry_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated_legacy_json_field_conflicts(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_legacy_json_field_conflicts_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct MessageOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
message_set_wire_format_written: bool,
no_standard_descriptor_accessor_written: bool,
deprecated_written: bool,
map_entry_written: bool,
deprecated_legacy_json_field_conflicts_written: bool,
features_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> MessageOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> MessageOptionsBuilder<'_> {
MessageOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
message_set_wire_format_written: false,
no_standard_descriptor_accessor_written: false,
deprecated_written: false,
map_entry_written: false,
deprecated_legacy_json_field_conflicts_written: false,
features_written: false,
uninterpreted_option_written: false,
}
}
pub fn message_set_wire_format(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(1, value)?;
self.message_set_wire_format_written = true;
Ok(self)
}
pub fn no_standard_descriptor_accessor(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.no_standard_descriptor_accessor_written = true;
Ok(self)
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn map_entry(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(7, value)?;
self.map_entry_written = true;
Ok(self)
}
pub fn deprecated_legacy_json_field_conflicts(
mut self,
value: u64,
) -> roto_runtime::Result<Self> {
self.builder.write_varint(11, value)?;
self.deprecated_legacy_json_field_conflicts_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(12, value)?;
self.features_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &MessageOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.message_set_wire_format_written,
2 => self.no_standard_descriptor_accessor_written,
3 => self.deprecated_written,
7 => self.map_entry_written,
11 => self.deprecated_legacy_json_field_conflicts_written,
12 => self.features_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct FieldOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
ctype_offset: Option<usize>,
packed_offset: Option<usize>,
jstype_offset: Option<usize>,
lazy_offset: Option<usize>,
unverified_lazy_offset: Option<usize>,
deprecated_offset: Option<usize>,
weak_offset: Option<usize>,
debug_redact_offset: Option<usize>,
retention_offset: Option<usize>,
targets_start: Option<usize>,
targets_end: Option<usize>,
edition_defaults_start: Option<usize>,
edition_defaults_end: Option<usize>,
features_offset: Option<usize>,
feature_support_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> FieldOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut ctype_offset = None;
let mut packed_offset = None;
let mut jstype_offset = None;
let mut lazy_offset = None;
let mut unverified_lazy_offset = None;
let mut deprecated_offset = None;
let mut weak_offset = None;
let mut debug_redact_offset = None;
let mut retention_offset = None;
let mut targets_start = None;
let mut targets_end = None;
let mut edition_defaults_start = None;
let mut edition_defaults_end = None;
let mut features_offset = None;
let mut feature_support_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
ctype_offset = Some(offset);
}
if tag.field_number == 2 {
packed_offset = Some(offset);
}
if tag.field_number == 6 {
jstype_offset = Some(offset);
}
if tag.field_number == 5 {
lazy_offset = Some(offset);
}
if tag.field_number == 15 {
unverified_lazy_offset = Some(offset);
}
if tag.field_number == 3 {
deprecated_offset = Some(offset);
}
if tag.field_number == 10 {
weak_offset = Some(offset);
}
if tag.field_number == 16 {
debug_redact_offset = Some(offset);
}
if tag.field_number == 17 {
retention_offset = Some(offset);
}
if tag.field_number == 19 {
if targets_start.is_none() {
targets_start = Some(offset);
}
targets_end = Some(offset);
}
if tag.field_number == 20 {
if edition_defaults_start.is_none() {
edition_defaults_start = Some(offset);
}
edition_defaults_end = Some(offset);
}
if tag.field_number == 21 {
features_offset = Some(offset);
}
if tag.field_number == 22 {
feature_support_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
ctype_offset,
packed_offset,
jstype_offset,
lazy_offset,
unverified_lazy_offset,
deprecated_offset,
weak_offset,
debug_redact_offset,
retention_offset,
targets_start,
targets_end,
edition_defaults_start,
edition_defaults_end,
features_offset,
feature_support_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn ctype(&self) -> roto_runtime::Result<u64> {
let offset = self
.ctype_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn packed(&self) -> roto_runtime::Result<bool> {
let offset = self
.packed_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn jstype(&self) -> roto_runtime::Result<u64> {
let offset = self
.jstype_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn lazy(&self) -> roto_runtime::Result<bool> {
let offset = self
.lazy_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn unverified_lazy(&self) -> roto_runtime::Result<bool> {
let offset = self
.unverified_lazy_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn weak(&self) -> roto_runtime::Result<bool> {
let offset = self
.weak_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn debug_redact(&self) -> roto_runtime::Result<bool> {
let offset = self
.debug_redact_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn retention(&self) -> roto_runtime::Result<u64> {
let offset = self
.retention_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn targets(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.targets_start, self.targets_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(19, start, end),
_ => self.accessor.iter_repeated(19),
}
}
pub fn edition_defaults(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.edition_defaults_start, self.edition_defaults_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(20, start, end),
_ => self.accessor.iter_repeated(20),
}
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn feature_support(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.feature_support_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FieldOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
ctype_written: bool,
packed_written: bool,
jstype_written: bool,
lazy_written: bool,
unverified_lazy_written: bool,
deprecated_written: bool,
weak_written: bool,
debug_redact_written: bool,
retention_written: bool,
targets_written: bool,
edition_defaults_written: bool,
features_written: bool,
feature_support_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> FieldOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FieldOptionsBuilder<'_> {
FieldOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
ctype_written: false,
packed_written: false,
jstype_written: false,
lazy_written: false,
unverified_lazy_written: false,
deprecated_written: false,
weak_written: false,
debug_redact_written: false,
retention_written: false,
targets_written: false,
edition_defaults_written: false,
features_written: false,
feature_support_written: false,
uninterpreted_option_written: false,
}
}
pub fn ctype(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(1, value)?;
self.ctype_written = true;
Ok(self)
}
pub fn packed(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.packed_written = true;
Ok(self)
}
pub fn jstype(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.jstype_written = true;
Ok(self)
}
pub fn lazy(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.lazy_written = true;
Ok(self)
}
pub fn unverified_lazy(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(15, value)?;
self.unverified_lazy_written = true;
Ok(self)
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn weak(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(10, value)?;
self.weak_written = true;
Ok(self)
}
pub fn debug_redact(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(16, value)?;
self.debug_redact_written = true;
Ok(self)
}
pub fn retention(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(17, value)?;
self.retention_written = true;
Ok(self)
}
pub fn targets(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(19, value)?;
self.targets_written = true;
Ok(self)
}
pub fn edition_defaults(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(20, value)?;
self.edition_defaults_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(21, value)?;
self.features_written = true;
Ok(self)
}
pub fn feature_support(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(22, value)?;
self.feature_support_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FieldOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.ctype_written,
2 => self.packed_written,
6 => self.jstype_written,
5 => self.lazy_written,
15 => self.unverified_lazy_written,
3 => self.deprecated_written,
10 => self.weak_written,
16 => self.debug_redact_written,
17 => self.retention_written,
19 => self.targets_written,
20 => self.edition_defaults_written,
21 => self.features_written,
22 => self.feature_support_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod field_options {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum CType {
STRING = 0,
CORD = 1,
STRINGPIECE = 2,
}
impl CType {
pub fn from_i32(value: i32) -> Self {
match value {
0 => CType::STRING,
1 => CType::CORD,
2 => CType::STRINGPIECE,
_ => CType::STRING,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum JSType {
JSNORMAL = 0,
JSSTRING = 1,
JSNUMBER = 2,
}
impl JSType {
pub fn from_i32(value: i32) -> Self {
match value {
0 => JSType::JSNORMAL,
1 => JSType::JSSTRING,
2 => JSType::JSNUMBER,
_ => JSType::JSNORMAL,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum OptionRetention {
RETENTIONUNKNOWN = 0,
RETENTIONRUNTIME = 1,
RETENTIONSOURCE = 2,
}
impl OptionRetention {
pub fn from_i32(value: i32) -> Self {
match value {
0 => OptionRetention::RETENTIONUNKNOWN,
1 => OptionRetention::RETENTIONRUNTIME,
2 => OptionRetention::RETENTIONSOURCE,
_ => OptionRetention::RETENTIONUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum OptionTargetType {
TARGETTYPEUNKNOWN = 0,
TARGETTYPEFILE = 1,
TARGETTYPEEXTENSIONRANGE = 2,
TARGETTYPEMESSAGE = 3,
TARGETTYPEFIELD = 4,
TARGETTYPEONEOF = 5,
TARGETTYPEENUM = 6,
TARGETTYPEENUMENTRY = 7,
TARGETTYPESERVICE = 8,
TARGETTYPEMETHOD = 9,
}
impl OptionTargetType {
pub fn from_i32(value: i32) -> Self {
match value {
0 => OptionTargetType::TARGETTYPEUNKNOWN,
1 => OptionTargetType::TARGETTYPEFILE,
2 => OptionTargetType::TARGETTYPEEXTENSIONRANGE,
3 => OptionTargetType::TARGETTYPEMESSAGE,
4 => OptionTargetType::TARGETTYPEFIELD,
5 => OptionTargetType::TARGETTYPEONEOF,
6 => OptionTargetType::TARGETTYPEENUM,
7 => OptionTargetType::TARGETTYPEENUMENTRY,
8 => OptionTargetType::TARGETTYPESERVICE,
9 => OptionTargetType::TARGETTYPEMETHOD,
_ => OptionTargetType::TARGETTYPEUNKNOWN,
}
}
}
pub struct EditionDefault<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
edition_offset: Option<usize>,
value_offset: Option<usize>,
}
impl<'a> EditionDefault<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut edition_offset = None;
let mut value_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 3 {
edition_offset = Some(offset);
}
if tag.field_number == 2 {
value_offset = Some(offset);
}
}
Ok(Self {
accessor,
edition_offset,
value_offset,
})
}
pub fn edition(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn value(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EditionDefaultBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
edition_written: bool,
value_written: bool,
}
impl<'b> EditionDefaultBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EditionDefaultBuilder<'_> {
EditionDefaultBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
edition_written: false,
value_written: false,
}
}
pub fn edition(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.edition_written = true;
Ok(self)
}
pub fn value(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.value_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EditionDefault<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
3 => self.edition_written,
2 => self.value_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct FeatureSupport<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
edition_introduced_offset: Option<usize>,
edition_deprecated_offset: Option<usize>,
deprecation_warning_offset: Option<usize>,
edition_removed_offset: Option<usize>,
removal_error_offset: Option<usize>,
}
impl<'a> FeatureSupport<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut edition_introduced_offset = None;
let mut edition_deprecated_offset = None;
let mut deprecation_warning_offset = None;
let mut edition_removed_offset = None;
let mut removal_error_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
edition_introduced_offset = Some(offset);
}
if tag.field_number == 2 {
edition_deprecated_offset = Some(offset);
}
if tag.field_number == 3 {
deprecation_warning_offset = Some(offset);
}
if tag.field_number == 4 {
edition_removed_offset = Some(offset);
}
if tag.field_number == 5 {
removal_error_offset = Some(offset);
}
}
Ok(Self {
accessor,
edition_introduced_offset,
edition_deprecated_offset,
deprecation_warning_offset,
edition_removed_offset,
removal_error_offset,
})
}
pub fn edition_introduced(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_introduced_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn edition_deprecated(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecation_warning(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.deprecation_warning_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn edition_removed(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_removed_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn removal_error(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.removal_error_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FeatureSupportBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
edition_introduced_written: bool,
edition_deprecated_written: bool,
deprecation_warning_written: bool,
edition_removed_written: bool,
removal_error_written: bool,
}
impl<'b> FeatureSupportBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FeatureSupportBuilder<'_> {
FeatureSupportBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
edition_introduced_written: false,
edition_deprecated_written: false,
deprecation_warning_written: false,
edition_removed_written: false,
removal_error_written: false,
}
}
pub fn edition_introduced(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(1, value)?;
self.edition_introduced_written = true;
Ok(self)
}
pub fn edition_deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.edition_deprecated_written = true;
Ok(self)
}
pub fn deprecation_warning(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.deprecation_warning_written = true;
Ok(self)
}
pub fn edition_removed(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(4, value)?;
self.edition_removed_written = true;
Ok(self)
}
pub fn removal_error(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(5, value)?;
self.removal_error_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FeatureSupport<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.edition_introduced_written,
2 => self.edition_deprecated_written,
3 => self.deprecation_warning_written,
4 => self.edition_removed_written,
5 => self.removal_error_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct OneofOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
features_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> OneofOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut features_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
features_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
features_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct OneofOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
features_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> OneofOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> OneofOptionsBuilder<'_> {
OneofOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
features_written: false,
uninterpreted_option_written: false,
}
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(1, value)?;
self.features_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &OneofOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.features_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct EnumOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
allow_alias_offset: Option<usize>,
deprecated_offset: Option<usize>,
deprecated_legacy_json_field_conflicts_offset: Option<usize>,
features_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> EnumOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut allow_alias_offset = None;
let mut deprecated_offset = None;
let mut deprecated_legacy_json_field_conflicts_offset = None;
let mut features_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 2 {
allow_alias_offset = Some(offset);
}
if tag.field_number == 3 {
deprecated_offset = Some(offset);
}
if tag.field_number == 6 {
deprecated_legacy_json_field_conflicts_offset = Some(offset);
}
if tag.field_number == 7 {
features_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
allow_alias_offset,
deprecated_offset,
deprecated_legacy_json_field_conflicts_offset,
features_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn allow_alias(&self) -> roto_runtime::Result<bool> {
let offset = self
.allow_alias_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn deprecated_legacy_json_field_conflicts(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_legacy_json_field_conflicts_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EnumOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
allow_alias_written: bool,
deprecated_written: bool,
deprecated_legacy_json_field_conflicts_written: bool,
features_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> EnumOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EnumOptionsBuilder<'_> {
EnumOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
allow_alias_written: false,
deprecated_written: false,
deprecated_legacy_json_field_conflicts_written: false,
features_written: false,
uninterpreted_option_written: false,
}
}
pub fn allow_alias(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.allow_alias_written = true;
Ok(self)
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn deprecated_legacy_json_field_conflicts(
mut self,
value: u64,
) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.deprecated_legacy_json_field_conflicts_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(7, value)?;
self.features_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EnumOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
2 => self.allow_alias_written,
3 => self.deprecated_written,
6 => self.deprecated_legacy_json_field_conflicts_written,
7 => self.features_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct EnumValueOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
deprecated_offset: Option<usize>,
features_offset: Option<usize>,
debug_redact_offset: Option<usize>,
feature_support_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> EnumValueOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut deprecated_offset = None;
let mut features_offset = None;
let mut debug_redact_offset = None;
let mut feature_support_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
deprecated_offset = Some(offset);
}
if tag.field_number == 2 {
features_offset = Some(offset);
}
if tag.field_number == 3 {
debug_redact_offset = Some(offset);
}
if tag.field_number == 4 {
feature_support_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
deprecated_offset,
features_offset,
debug_redact_offset,
feature_support_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn debug_redact(&self) -> roto_runtime::Result<bool> {
let offset = self
.debug_redact_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn feature_support(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.feature_support_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct EnumValueOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
deprecated_written: bool,
features_written: bool,
debug_redact_written: bool,
feature_support_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> EnumValueOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> EnumValueOptionsBuilder<'_> {
EnumValueOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
deprecated_written: false,
features_written: false,
debug_redact_written: false,
feature_support_written: false,
uninterpreted_option_written: false,
}
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(1, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.features_written = true;
Ok(self)
}
pub fn debug_redact(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.debug_redact_written = true;
Ok(self)
}
pub fn feature_support(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.feature_support_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &EnumValueOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.deprecated_written,
2 => self.features_written,
3 => self.debug_redact_written,
4 => self.feature_support_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct ServiceOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
features_offset: Option<usize>,
deprecated_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> ServiceOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut features_offset = None;
let mut deprecated_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 34 {
features_offset = Some(offset);
}
if tag.field_number == 33 {
deprecated_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
features_offset,
deprecated_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ServiceOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
features_written: bool,
deprecated_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> ServiceOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ServiceOptionsBuilder<'_> {
ServiceOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
features_written: false,
deprecated_written: false,
uninterpreted_option_written: false,
}
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(34, value)?;
self.features_written = true;
Ok(self)
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(33, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &ServiceOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
34 => self.features_written,
33 => self.deprecated_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub struct MethodOptions<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
deprecated_offset: Option<usize>,
idempotency_level_offset: Option<usize>,
features_offset: Option<usize>,
uninterpreted_option_start: Option<usize>,
uninterpreted_option_end: Option<usize>,
}
impl<'a> MethodOptions<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut deprecated_offset = None;
let mut idempotency_level_offset = None;
let mut features_offset = None;
let mut uninterpreted_option_start = None;
let mut uninterpreted_option_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 33 {
deprecated_offset = Some(offset);
}
if tag.field_number == 34 {
idempotency_level_offset = Some(offset);
}
if tag.field_number == 35 {
features_offset = Some(offset);
}
if tag.field_number == 999 {
if uninterpreted_option_start.is_none() {
uninterpreted_option_start = Some(offset);
}
uninterpreted_option_end = Some(offset);
}
}
Ok(Self {
accessor,
deprecated_offset,
idempotency_level_offset,
features_offset,
uninterpreted_option_start,
uninterpreted_option_end,
})
}
pub fn deprecated(&self) -> roto_runtime::Result<bool> {
let offset = self
.deprecated_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn idempotency_level(&self) -> roto_runtime::Result<u64> {
let offset = self
.idempotency_level_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn uninterpreted_option(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.uninterpreted_option_start,
self.uninterpreted_option_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(999, start, end),
_ => self.accessor.iter_repeated(999),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct MethodOptionsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
deprecated_written: bool,
idempotency_level_written: bool,
features_written: bool,
uninterpreted_option_written: bool,
}
impl<'b> MethodOptionsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> MethodOptionsBuilder<'_> {
MethodOptionsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
deprecated_written: false,
idempotency_level_written: false,
features_written: false,
uninterpreted_option_written: false,
}
}
pub fn deprecated(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(33, value)?;
self.deprecated_written = true;
Ok(self)
}
pub fn idempotency_level(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(34, value)?;
self.idempotency_level_written = true;
Ok(self)
}
pub fn features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(35, value)?;
self.features_written = true;
Ok(self)
}
pub fn uninterpreted_option(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(999, value)?;
self.uninterpreted_option_written = true;
Ok(self)
}
pub fn with(mut self, msg: &MethodOptions<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
33 => self.deprecated_written,
34 => self.idempotency_level_written,
35 => self.features_written,
999 => self.uninterpreted_option_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod method_options {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum IdempotencyLevel {
IDEMPOTENCYUNKNOWN = 0,
NOSIDEEFFECTS = 1,
IDEMPOTENT = 2,
}
impl IdempotencyLevel {
pub fn from_i32(value: i32) -> Self {
match value {
0 => IdempotencyLevel::IDEMPOTENCYUNKNOWN,
1 => IdempotencyLevel::NOSIDEEFFECTS,
2 => IdempotencyLevel::IDEMPOTENT,
_ => IdempotencyLevel::IDEMPOTENCYUNKNOWN,
}
}
}
}
pub struct UninterpretedOption<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_start: Option<usize>,
name_end: Option<usize>,
identifier_value_offset: Option<usize>,
positive_int_value_offset: Option<usize>,
negative_int_value_offset: Option<usize>,
double_value_offset: Option<usize>,
string_value_offset: Option<usize>,
aggregate_value_offset: Option<usize>,
}
impl<'a> UninterpretedOption<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_start = None;
let mut name_end = None;
let mut identifier_value_offset = None;
let mut positive_int_value_offset = None;
let mut negative_int_value_offset = None;
let mut double_value_offset = None;
let mut string_value_offset = None;
let mut aggregate_value_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 2 {
if name_start.is_none() {
name_start = Some(offset);
}
name_end = Some(offset);
}
if tag.field_number == 3 {
identifier_value_offset = Some(offset);
}
if tag.field_number == 4 {
positive_int_value_offset = Some(offset);
}
if tag.field_number == 5 {
negative_int_value_offset = Some(offset);
}
if tag.field_number == 6 {
double_value_offset = Some(offset);
}
if tag.field_number == 7 {
string_value_offset = Some(offset);
}
if tag.field_number == 8 {
aggregate_value_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_start,
name_end,
identifier_value_offset,
positive_int_value_offset,
negative_int_value_offset,
double_value_offset,
string_value_offset,
aggregate_value_offset,
})
}
pub fn name(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.name_start, self.name_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn identifier_value(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.identifier_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn positive_int_value(&self) -> roto_runtime::Result<u32> {
let offset = self
.positive_int_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn negative_int_value(&self) -> roto_runtime::Result<i32> {
let offset = self
.negative_int_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn double_value(&self) -> roto_runtime::Result<f64> {
let offset = self
.double_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(f64::from_le_bytes(bytes.try_into().map_err(|_| {
roto_runtime::RotoError::WireFormatViolation
})?))
}
pub fn string_value(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.string_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn aggregate_value(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.aggregate_value_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct UninterpretedOptionBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_written: bool,
identifier_value_written: bool,
positive_int_value_written: bool,
negative_int_value_written: bool,
double_value_written: bool,
string_value_written: bool,
aggregate_value_written: bool,
}
impl<'b> UninterpretedOptionBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> UninterpretedOptionBuilder<'_> {
UninterpretedOptionBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_written: false,
identifier_value_written: false,
positive_int_value_written: false,
negative_int_value_written: false,
double_value_written: false,
string_value_written: false,
aggregate_value_written: false,
}
}
pub fn name(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(2, value)?;
self.name_written = true;
Ok(self)
}
pub fn identifier_value(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.identifier_value_written = true;
Ok(self)
}
pub fn positive_int_value(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(4, value)?;
self.positive_int_value_written = true;
Ok(self)
}
pub fn negative_int_value(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.negative_int_value_written = true;
Ok(self)
}
pub fn double_value(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(6, value)?;
self.double_value_written = true;
Ok(self)
}
pub fn string_value(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(7, value)?;
self.string_value_written = true;
Ok(self)
}
pub fn aggregate_value(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(8, value)?;
self.aggregate_value_written = true;
Ok(self)
}
pub fn with(mut self, msg: &UninterpretedOption<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
2 => self.name_written,
3 => self.identifier_value_written,
4 => self.positive_int_value_written,
5 => self.negative_int_value_written,
6 => self.double_value_written,
7 => self.string_value_written,
8 => self.aggregate_value_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod uninterpreted_option {
pub struct NamePart<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
name_part_offset: Option<usize>,
is_extension_offset: Option<usize>,
}
impl<'a> NamePart<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut name_part_offset = None;
let mut is_extension_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
name_part_offset = Some(offset);
}
if tag.field_number == 2 {
is_extension_offset = Some(offset);
}
}
Ok(Self {
accessor,
name_part_offset,
is_extension_offset,
})
}
pub fn name_part(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.name_part_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn is_extension(&self) -> roto_runtime::Result<bool> {
let offset = self
.is_extension_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v != 0)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct NamePartBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
name_part_written: bool,
is_extension_written: bool,
}
impl<'b> NamePartBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> NamePartBuilder<'_> {
NamePartBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
name_part_written: false,
is_extension_written: false,
}
}
pub fn name_part(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(1, value)?;
self.name_part_written = true;
Ok(self)
}
pub fn is_extension(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.is_extension_written = true;
Ok(self)
}
pub fn with(mut self, msg: &NamePart<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.name_part_written,
2 => self.is_extension_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct FeatureSet<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
field_presence_offset: Option<usize>,
enum_type_offset: Option<usize>,
repeated_field_encoding_offset: Option<usize>,
utf8_validation_offset: Option<usize>,
message_encoding_offset: Option<usize>,
json_format_offset: Option<usize>,
enforce_naming_style_offset: Option<usize>,
default_symbol_visibility_offset: Option<usize>,
enforce_proto_limits_offset: Option<usize>,
}
impl<'a> FeatureSet<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut field_presence_offset = None;
let mut enum_type_offset = None;
let mut repeated_field_encoding_offset = None;
let mut utf8_validation_offset = None;
let mut message_encoding_offset = None;
let mut json_format_offset = None;
let mut enforce_naming_style_offset = None;
let mut default_symbol_visibility_offset = None;
let mut enforce_proto_limits_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
field_presence_offset = Some(offset);
}
if tag.field_number == 2 {
enum_type_offset = Some(offset);
}
if tag.field_number == 3 {
repeated_field_encoding_offset = Some(offset);
}
if tag.field_number == 4 {
utf8_validation_offset = Some(offset);
}
if tag.field_number == 5 {
message_encoding_offset = Some(offset);
}
if tag.field_number == 6 {
json_format_offset = Some(offset);
}
if tag.field_number == 7 {
enforce_naming_style_offset = Some(offset);
}
if tag.field_number == 8 {
default_symbol_visibility_offset = Some(offset);
}
if tag.field_number == 9 {
enforce_proto_limits_offset = Some(offset);
}
}
Ok(Self {
accessor,
field_presence_offset,
enum_type_offset,
repeated_field_encoding_offset,
utf8_validation_offset,
message_encoding_offset,
json_format_offset,
enforce_naming_style_offset,
default_symbol_visibility_offset,
enforce_proto_limits_offset,
})
}
pub fn field_presence(&self) -> roto_runtime::Result<u64> {
let offset = self
.field_presence_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn enum_type(&self) -> roto_runtime::Result<u64> {
let offset = self
.enum_type_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn repeated_field_encoding(&self) -> roto_runtime::Result<u64> {
let offset = self
.repeated_field_encoding_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn utf8_validation(&self) -> roto_runtime::Result<u64> {
let offset = self
.utf8_validation_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn message_encoding(&self) -> roto_runtime::Result<u64> {
let offset = self
.message_encoding_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn json_format(&self) -> roto_runtime::Result<u64> {
let offset = self
.json_format_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn enforce_naming_style(&self) -> roto_runtime::Result<u64> {
let offset = self
.enforce_naming_style_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn default_symbol_visibility(&self) -> roto_runtime::Result<u64> {
let offset = self
.default_symbol_visibility_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn enforce_proto_limits(&self) -> roto_runtime::Result<u64> {
let offset = self
.enforce_proto_limits_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FeatureSetBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
field_presence_written: bool,
enum_type_written: bool,
repeated_field_encoding_written: bool,
utf8_validation_written: bool,
message_encoding_written: bool,
json_format_written: bool,
enforce_naming_style_written: bool,
default_symbol_visibility_written: bool,
enforce_proto_limits_written: bool,
}
impl<'b> FeatureSetBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FeatureSetBuilder<'_> {
FeatureSetBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
field_presence_written: false,
enum_type_written: false,
repeated_field_encoding_written: false,
utf8_validation_written: false,
message_encoding_written: false,
json_format_written: false,
enforce_naming_style_written: false,
default_symbol_visibility_written: false,
enforce_proto_limits_written: false,
}
}
pub fn field_presence(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(1, value)?;
self.field_presence_written = true;
Ok(self)
}
pub fn enum_type(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(2, value)?;
self.enum_type_written = true;
Ok(self)
}
pub fn repeated_field_encoding(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.repeated_field_encoding_written = true;
Ok(self)
}
pub fn utf8_validation(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(4, value)?;
self.utf8_validation_written = true;
Ok(self)
}
pub fn message_encoding(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.message_encoding_written = true;
Ok(self)
}
pub fn json_format(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(6, value)?;
self.json_format_written = true;
Ok(self)
}
pub fn enforce_naming_style(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(7, value)?;
self.enforce_naming_style_written = true;
Ok(self)
}
pub fn default_symbol_visibility(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(8, value)?;
self.default_symbol_visibility_written = true;
Ok(self)
}
pub fn enforce_proto_limits(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(9, value)?;
self.enforce_proto_limits_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FeatureSet<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.field_presence_written,
2 => self.enum_type_written,
3 => self.repeated_field_encoding_written,
4 => self.utf8_validation_written,
5 => self.message_encoding_written,
6 => self.json_format_written,
7 => self.enforce_naming_style_written,
8 => self.default_symbol_visibility_written,
9 => self.enforce_proto_limits_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod feature_set {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum FieldPresence {
FIELDPRESENCEUNKNOWN = 0,
EXPLICIT = 1,
IMPLICIT = 2,
LEGACYREQUIRED = 3,
}
impl FieldPresence {
pub fn from_i32(value: i32) -> Self {
match value {
0 => FieldPresence::FIELDPRESENCEUNKNOWN,
1 => FieldPresence::EXPLICIT,
2 => FieldPresence::IMPLICIT,
3 => FieldPresence::LEGACYREQUIRED,
_ => FieldPresence::FIELDPRESENCEUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum EnumType {
ENUMTYPEUNKNOWN = 0,
OPEN = 1,
CLOSED = 2,
}
impl EnumType {
pub fn from_i32(value: i32) -> Self {
match value {
0 => EnumType::ENUMTYPEUNKNOWN,
1 => EnumType::OPEN,
2 => EnumType::CLOSED,
_ => EnumType::ENUMTYPEUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum RepeatedFieldEncoding {
REPEATEDFIELDENCODINGUNKNOWN = 0,
PACKED = 1,
EXPANDED = 2,
}
impl RepeatedFieldEncoding {
pub fn from_i32(value: i32) -> Self {
match value {
0 => RepeatedFieldEncoding::REPEATEDFIELDENCODINGUNKNOWN,
1 => RepeatedFieldEncoding::PACKED,
2 => RepeatedFieldEncoding::EXPANDED,
_ => RepeatedFieldEncoding::REPEATEDFIELDENCODINGUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum Utf8Validation {
UTF8VALIDATIONUNKNOWN = 0,
VERIFY = 2,
NONE = 3,
}
impl Utf8Validation {
pub fn from_i32(value: i32) -> Self {
match value {
0 => Utf8Validation::UTF8VALIDATIONUNKNOWN,
2 => Utf8Validation::VERIFY,
3 => Utf8Validation::NONE,
_ => Utf8Validation::UTF8VALIDATIONUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum MessageEncoding {
MESSAGEENCODINGUNKNOWN = 0,
LENGTHPREFIXED = 1,
DELIMITED = 2,
}
impl MessageEncoding {
pub fn from_i32(value: i32) -> Self {
match value {
0 => MessageEncoding::MESSAGEENCODINGUNKNOWN,
1 => MessageEncoding::LENGTHPREFIXED,
2 => MessageEncoding::DELIMITED,
_ => MessageEncoding::MESSAGEENCODINGUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum JsonFormat {
JSONFORMATUNKNOWN = 0,
ALLOW = 1,
LEGACYBESTEFFORT = 2,
}
impl JsonFormat {
pub fn from_i32(value: i32) -> Self {
match value {
0 => JsonFormat::JSONFORMATUNKNOWN,
1 => JsonFormat::ALLOW,
2 => JsonFormat::LEGACYBESTEFFORT,
_ => JsonFormat::JSONFORMATUNKNOWN,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum EnforceNamingStyle {
ENFORCENAMINGSTYLEUNKNOWN = 0,
STYLE2024 = 1,
STYLELEGACY = 2,
STYLE2026 = 3,
}
impl EnforceNamingStyle {
pub fn from_i32(value: i32) -> Self {
match value {
0 => EnforceNamingStyle::ENFORCENAMINGSTYLEUNKNOWN,
1 => EnforceNamingStyle::STYLE2024,
2 => EnforceNamingStyle::STYLELEGACY,
3 => EnforceNamingStyle::STYLE2026,
_ => EnforceNamingStyle::ENFORCENAMINGSTYLEUNKNOWN,
}
}
}
pub struct VisibilityFeature<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
}
impl<'a> VisibilityFeature<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
Ok(Self { accessor })
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct VisibilityFeatureBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
}
impl<'b> VisibilityFeatureBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> VisibilityFeatureBuilder<'_> {
VisibilityFeatureBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
}
}
pub fn with(mut self, msg: &VisibilityFeature<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod visibility_feature {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum DefaultSymbolVisibility {
DEFAULTSYMBOLVISIBILITYUNKNOWN = 0,
EXPORTALL = 1,
EXPORTTOPLEVEL = 2,
LOCALALL = 3,
STRICT = 4,
}
impl DefaultSymbolVisibility {
pub fn from_i32(value: i32) -> Self {
match value {
0 => DefaultSymbolVisibility::DEFAULTSYMBOLVISIBILITYUNKNOWN,
1 => DefaultSymbolVisibility::EXPORTALL,
2 => DefaultSymbolVisibility::EXPORTTOPLEVEL,
3 => DefaultSymbolVisibility::LOCALALL,
4 => DefaultSymbolVisibility::STRICT,
_ => DefaultSymbolVisibility::DEFAULTSYMBOLVISIBILITYUNKNOWN,
}
}
}
}
pub struct ProtoLimitsFeature<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
}
impl<'a> ProtoLimitsFeature<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
Ok(Self { accessor })
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct ProtoLimitsFeatureBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
}
impl<'b> ProtoLimitsFeatureBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> ProtoLimitsFeatureBuilder<'_> {
ProtoLimitsFeatureBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
}
}
pub fn with(mut self, msg: &ProtoLimitsFeature<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod proto_limits_feature {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum EnforceProtoLimits {
PROTOLIMITSUNKNOWN = 0,
LEGACYNOEXPLICITLIMITS = 1,
PROTOLIMITS2026 = 2,
}
impl EnforceProtoLimits {
pub fn from_i32(value: i32) -> Self {
match value {
0 => EnforceProtoLimits::PROTOLIMITSUNKNOWN,
1 => EnforceProtoLimits::LEGACYNOEXPLICITLIMITS,
2 => EnforceProtoLimits::PROTOLIMITS2026,
_ => EnforceProtoLimits::PROTOLIMITSUNKNOWN,
}
}
}
}
}
pub struct FeatureSetDefaults<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
defaults_start: Option<usize>,
defaults_end: Option<usize>,
minimum_edition_offset: Option<usize>,
maximum_edition_offset: Option<usize>,
}
impl<'a> FeatureSetDefaults<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut defaults_start = None;
let mut defaults_end = None;
let mut minimum_edition_offset = None;
let mut maximum_edition_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if defaults_start.is_none() {
defaults_start = Some(offset);
}
defaults_end = Some(offset);
}
if tag.field_number == 4 {
minimum_edition_offset = Some(offset);
}
if tag.field_number == 5 {
maximum_edition_offset = Some(offset);
}
}
Ok(Self {
accessor,
defaults_start,
defaults_end,
minimum_edition_offset,
maximum_edition_offset,
})
}
pub fn defaults(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.defaults_start, self.defaults_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn minimum_edition(&self) -> roto_runtime::Result<u64> {
let offset = self
.minimum_edition_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn maximum_edition(&self) -> roto_runtime::Result<u64> {
let offset = self
.maximum_edition_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FeatureSetDefaultsBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
defaults_written: bool,
minimum_edition_written: bool,
maximum_edition_written: bool,
}
impl<'b> FeatureSetDefaultsBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FeatureSetDefaultsBuilder<'_> {
FeatureSetDefaultsBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
defaults_written: false,
minimum_edition_written: false,
maximum_edition_written: false,
}
}
pub fn defaults(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(1, value)?;
self.defaults_written = true;
Ok(self)
}
pub fn minimum_edition(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(4, value)?;
self.minimum_edition_written = true;
Ok(self)
}
pub fn maximum_edition(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.maximum_edition_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FeatureSetDefaults<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.defaults_written,
4 => self.minimum_edition_written,
5 => self.maximum_edition_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod feature_set_defaults {
pub struct FeatureSetEditionDefault<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
edition_offset: Option<usize>,
overridable_features_offset: Option<usize>,
fixed_features_offset: Option<usize>,
}
impl<'a> FeatureSetEditionDefault<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut edition_offset = None;
let mut overridable_features_offset = None;
let mut fixed_features_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 3 {
edition_offset = Some(offset);
}
if tag.field_number == 4 {
overridable_features_offset = Some(offset);
}
if tag.field_number == 5 {
fixed_features_offset = Some(offset);
}
}
Ok(Self {
accessor,
edition_offset,
overridable_features_offset,
fixed_features_offset,
})
}
pub fn edition(&self) -> roto_runtime::Result<u64> {
let offset = self
.edition_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn overridable_features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.overridable_features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn fixed_features(&self) -> roto_runtime::Result<&'a [u8]> {
let offset = self
.fixed_features_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
Ok(bytes)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct FeatureSetEditionDefaultBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
edition_written: bool,
overridable_features_written: bool,
fixed_features_written: bool,
}
impl<'b> FeatureSetEditionDefaultBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> FeatureSetEditionDefaultBuilder<'_> {
FeatureSetEditionDefaultBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
edition_written: false,
overridable_features_written: false,
fixed_features_written: false,
}
}
pub fn edition(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(3, value)?;
self.edition_written = true;
Ok(self)
}
pub fn overridable_features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(4, value)?;
self.overridable_features_written = true;
Ok(self)
}
pub fn fixed_features(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(5, value)?;
self.fixed_features_written = true;
Ok(self)
}
pub fn with(mut self, msg: &FeatureSetEditionDefault<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
3 => self.edition_written,
4 => self.overridable_features_written,
5 => self.fixed_features_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct SourceCodeInfo<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
location_start: Option<usize>,
location_end: Option<usize>,
}
impl<'a> SourceCodeInfo<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut location_start = None;
let mut location_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if location_start.is_none() {
location_start = Some(offset);
}
location_end = Some(offset);
}
}
Ok(Self {
accessor,
location_start,
location_end,
})
}
pub fn location(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.location_start, self.location_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct SourceCodeInfoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
location_written: bool,
}
impl<'b> SourceCodeInfoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> SourceCodeInfoBuilder<'_> {
SourceCodeInfoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
location_written: false,
}
}
pub fn location(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(1, value)?;
self.location_written = true;
Ok(self)
}
pub fn with(mut self, msg: &SourceCodeInfo<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.location_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod source_code_info {
pub struct Location<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
path_start: Option<usize>,
path_end: Option<usize>,
span_start: Option<usize>,
span_end: Option<usize>,
leading_comments_offset: Option<usize>,
trailing_comments_offset: Option<usize>,
leading_detached_comments_start: Option<usize>,
leading_detached_comments_end: Option<usize>,
}
impl<'a> Location<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut path_start = None;
let mut path_end = None;
let mut span_start = None;
let mut span_end = None;
let mut leading_comments_offset = None;
let mut trailing_comments_offset = None;
let mut leading_detached_comments_start = None;
let mut leading_detached_comments_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if path_start.is_none() {
path_start = Some(offset);
}
path_end = Some(offset);
}
if tag.field_number == 2 {
if span_start.is_none() {
span_start = Some(offset);
}
span_end = Some(offset);
}
if tag.field_number == 3 {
leading_comments_offset = Some(offset);
}
if tag.field_number == 4 {
trailing_comments_offset = Some(offset);
}
if tag.field_number == 6 {
if leading_detached_comments_start.is_none() {
leading_detached_comments_start = Some(offset);
}
leading_detached_comments_end = Some(offset);
}
}
Ok(Self {
accessor,
path_start,
path_end,
span_start,
span_end,
leading_comments_offset,
trailing_comments_offset,
leading_detached_comments_start,
leading_detached_comments_end,
})
}
pub fn path(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.path_start, self.path_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn span(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.span_start, self.span_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(2, start, end),
_ => self.accessor.iter_repeated(2),
}
}
pub fn leading_comments(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.leading_comments_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn trailing_comments(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.trailing_comments_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn leading_detached_comments(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (
self.leading_detached_comments_start,
self.leading_detached_comments_end,
) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(6, start, end),
_ => self.accessor.iter_repeated(6),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct LocationBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
path_written: bool,
span_written: bool,
leading_comments_written: bool,
trailing_comments_written: bool,
leading_detached_comments_written: bool,
}
impl<'b> LocationBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> LocationBuilder<'_> {
LocationBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
path_written: false,
span_written: false,
leading_comments_written: false,
trailing_comments_written: false,
leading_detached_comments_written: false,
}
}
pub fn path(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.path_written = true;
Ok(self)
}
pub fn span(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(2, value)?;
self.span_written = true;
Ok(self)
}
pub fn leading_comments(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(3, value)?;
self.leading_comments_written = true;
Ok(self)
}
pub fn trailing_comments(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(4, value)?;
self.trailing_comments_written = true;
Ok(self)
}
pub fn leading_detached_comments(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(6, value)?;
self.leading_detached_comments_written = true;
Ok(self)
}
pub fn with(mut self, msg: &Location<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.path_written,
2 => self.span_written,
3 => self.leading_comments_written,
4 => self.trailing_comments_written,
6 => self.leading_detached_comments_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
}
pub struct GeneratedCodeInfo<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
annotation_start: Option<usize>,
annotation_end: Option<usize>,
}
impl<'a> GeneratedCodeInfo<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut annotation_start = None;
let mut annotation_end = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if annotation_start.is_none() {
annotation_start = Some(offset);
}
annotation_end = Some(offset);
}
}
Ok(Self {
accessor,
annotation_start,
annotation_end,
})
}
pub fn annotation(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.annotation_start, self.annotation_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct GeneratedCodeInfoBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
annotation_written: bool,
}
impl<'b> GeneratedCodeInfoBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> GeneratedCodeInfoBuilder<'_> {
GeneratedCodeInfoBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
annotation_written: false,
}
}
pub fn annotation(mut self, value: &[u8]) -> roto_runtime::Result<Self> {
self.builder.write_bytes(1, value)?;
self.annotation_written = true;
Ok(self)
}
pub fn with(mut self, msg: &GeneratedCodeInfo<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.annotation_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod generated_code_info {
pub struct Annotation<'a> {
accessor: roto_runtime::ProtoAccessor<'a>,
path_start: Option<usize>,
path_end: Option<usize>,
source_file_offset: Option<usize>,
begin_offset: Option<usize>,
end_offset: Option<usize>,
semantic_offset: Option<usize>,
}
impl<'a> Annotation<'a> {
pub fn new(data: &'a [u8]) -> roto_runtime::Result<Self> {
let accessor = roto_runtime::ProtoAccessor::new(data)?;
let mut path_start = None;
let mut path_end = None;
let mut source_file_offset = None;
let mut begin_offset = None;
let mut end_offset = None;
let mut semantic_offset = None;
for item in accessor.fields() {
let (offset, tag, _) = item?;
if tag.field_number == 1 {
if path_start.is_none() {
path_start = Some(offset);
}
path_end = Some(offset);
}
if tag.field_number == 2 {
source_file_offset = Some(offset);
}
if tag.field_number == 3 {
begin_offset = Some(offset);
}
if tag.field_number == 4 {
end_offset = Some(offset);
}
if tag.field_number == 5 {
semantic_offset = Some(offset);
}
}
Ok(Self {
accessor,
path_start,
path_end,
source_file_offset,
begin_offset,
end_offset,
semantic_offset,
})
}
pub fn path(&self) -> roto_runtime::RepeatedFieldIterator<'a> {
match (self.path_start, self.path_end) {
(Some(start), Some(end)) => self.accessor.iter_repeated_range(1, start, end),
_ => self.accessor.iter_repeated(1),
}
}
pub fn source_file(&self) -> roto_runtime::Result<&'a str> {
let offset = self
.source_file_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
str::from_utf8(bytes).map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn begin(&self) -> roto_runtime::Result<i32> {
let offset = self
.begin_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn end(&self) -> roto_runtime::Result<i32> {
let offset = self
.end_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as i32)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn semantic(&self) -> roto_runtime::Result<u64> {
let offset = self
.semantic_offset
.ok_or(roto_runtime::RotoError::FieldNotFound)?;
let (bytes, _) = self.accessor.get_value_at(offset)?;
roto_runtime::read_varint(bytes)
.map(|(v, _)| v as u64)
.map_err(|_| roto_runtime::RotoError::WireFormatViolation)
}
pub fn raw_fields(&self) -> roto_runtime::RawFieldIterator<'a> {
self.accessor.raw_fields()
}
}
pub struct AnnotationBuilder<'b> {
builder: roto_runtime::ProtoBuilder<'b>,
path_written: bool,
source_file_written: bool,
begin_written: bool,
end_written: bool,
semantic_written: bool,
}
impl<'b> AnnotationBuilder<'b> {
pub fn builder(buf: &mut [u8]) -> AnnotationBuilder<'_> {
AnnotationBuilder {
builder: roto_runtime::ProtoBuilder::new(buf),
path_written: false,
source_file_written: false,
begin_written: false,
end_written: false,
semantic_written: false,
}
}
pub fn path(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(1, value)?;
self.path_written = true;
Ok(self)
}
pub fn source_file(mut self, value: &str) -> roto_runtime::Result<Self> {
self.builder.write_string(2, value)?;
self.source_file_written = true;
Ok(self)
}
pub fn begin(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(3, value)?;
self.begin_written = true;
Ok(self)
}
pub fn end(mut self, value: i32) -> roto_runtime::Result<Self> {
self.builder.write_int32(4, value)?;
self.end_written = true;
Ok(self)
}
pub fn semantic(mut self, value: u64) -> roto_runtime::Result<Self> {
self.builder.write_varint(5, value)?;
self.semantic_written = true;
Ok(self)
}
pub fn with(mut self, msg: &Annotation<'_>) -> roto_runtime::Result<Self> {
for item in msg.raw_fields() {
let (field_number, raw_bytes) = item?;
let is_written = match field_number {
1 => self.path_written,
2 => self.source_file_written,
3 => self.begin_written,
4 => self.end_written,
5 => self.semantic_written,
_ => false,
};
if !is_written {
self.builder.write_raw(raw_bytes)?;
}
}
Ok(self)
}
pub fn finish(self) -> roto_runtime::Result<&'b mut [u8]> {
self.builder.finish()
}
}
pub mod annotation {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum Semantic {
NONE = 0,
SET = 1,
ALIAS = 2,
}
impl Semantic {
pub fn from_i32(value: i32) -> Self {
match value {
0 => Semantic::NONE,
1 => Semantic::SET,
2 => Semantic::ALIAS,
_ => Semantic::NONE,
}
}
}
}
}