Add EnumDescriptorProto and clap dependency

This commit is contained in:
2026-05-02 22:12:45 -07:00
parent 3454af9604
commit 33449d00c8
5 changed files with 469 additions and 0 deletions
@@ -254,6 +254,67 @@ impl<'b> DescriptorProtoBuilder<'b> {
}
}
pub struct EnumDescriptorProto<'a>(ProtoAccessor<'a>);
impl<'a> EnumDescriptorProto<'a> {
pub fn new(data: &'a [u8]) -> Result<Self> {
Ok(Self(ProtoAccessor::new(data)?))
}
pub fn name(&self) -> Result<&'a str> {
let (bytes, _) = self.0.get_value(1)?;
str::from_utf8(bytes).map_err(|_| RotoError::WireFormatViolation)
}
pub fn enum_value(&self) -> crate::RepeatedFieldIterator<'a> {
self.0.iter_repeated(2)
}
pub fn reserved_value(&self) -> crate::RepeatedFieldIterator<'a> {
self.0.iter_repeated(3)
}
pub fn options(&self) -> crate::RepeatedFieldIterator<'a> {
self.0.iter_repeated(4)
}
pub fn builder(buf: &mut [u8]) -> EnumDescriptorProtoBuilder<'_> {
EnumDescriptorProtoBuilder {
builder: ProtoBuilder::new(buf),
}
}
}
pub struct EnumDescriptorProtoBuilder<'b> {
builder: ProtoBuilder<'b>,
}
impl<'b> EnumDescriptorProtoBuilder<'b> {
pub fn name(mut self, value: &str) -> Result<Self> {
self.builder.write_string(1, value)?;
Ok(self)
}
pub fn add_enum_value(mut self, data: &[u8]) -> Result<Self> {
self.builder.write_bytes(2, data)?;
Ok(self)
}
pub fn add_reserved_value(mut self, value: i32) -> Result<Self> {
self.builder.write_int32(3, value)?;
Ok(self)
}
pub fn add_options(mut self, data: &[u8]) -> Result<Self> {
self.builder.write_bytes(4, data)?;
Ok(self)
}
pub fn finish(self) -> Result<&'b mut [u8]> {
self.builder.finish()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FieldType {
Double = 1,