//! Utilities to support "extension" fields. //! //! Extensions are [described in the official protobuf documentation][exts]. //! //! [exts]: https://developers.google.com/protocol-buffers/docs/proto#extensions use std::marker::PhantomData; use crate::message::Message; use crate::types::ProtobufType; /// Optional ext field pub struct ExtFieldOptional { /// Extension field number pub field_number: u32, /// Marker // TODO: hide pub phantom: PhantomData<(M, T)>, } /// Repeated ext field pub struct ExtFieldRepeated { /// Extension field number pub field_number: u32, /// Extension field number // TODO: hide pub phantom: PhantomData<(M, T)>, } impl ExtFieldOptional { /// Get a copy of value from a message. /// /// Extension data is stored in [`UnknownFields`](crate::UnknownFields). pub fn get(&self, m: &M) -> Option { m.get_unknown_fields() .get(self.field_number) .and_then(T::get_from_unknown) } } impl ExtFieldRepeated { /// Get a copy of value from a message (**not implemented**). pub fn get(&self, _m: &M) -> Vec { // TODO unimplemented!() } }