Import protobuf-2.14.0
* Add OWNERS and Android.bp
* add generated version.rs into out
Bug: 143953733
Test: make
Change-Id: Ib53a973b74679c4dd78e2de2fa54141e55048c17
diff --git a/src/ext.rs b/src/ext.rs
new file mode 100644
index 0000000..70b7439
--- /dev/null
+++ b/src/ext.rs
@@ -0,0 +1,47 @@
+//! 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 core::Message;
+use types::ProtobufType;
+
+/// Optional ext field
+pub struct ExtFieldOptional<M: Message, T: ProtobufType> {
+ /// Extension field number
+ pub field_number: u32,
+ /// Marker
+ // TODO: hide
+ pub phantom: PhantomData<(M, T)>,
+}
+
+/// Repeated ext field
+pub struct ExtFieldRepeated<M: Message, T: ProtobufType> {
+ /// Extension field number
+ pub field_number: u32,
+ /// Extension field number
+ // TODO: hide
+ pub phantom: PhantomData<(M, T)>,
+}
+
+impl<M: Message, T: ProtobufType> ExtFieldOptional<M, T> {
+ /// Get a copy of value from a message.
+ ///
+ /// Extension data is stored in [`UnknownFields`](crate::UnknownFields).
+ pub fn get(&self, m: &M) -> Option<T::Value> {
+ m.get_unknown_fields()
+ .get(self.field_number)
+ .and_then(T::get_from_unknown)
+ }
+}
+
+impl<M: Message, T: ProtobufType> ExtFieldRepeated<M, T> {
+ /// Get a copy of value from a message (**not implemented**).
+ pub fn get(&self, _m: &M) -> Vec<T::Value> {
+ // TODO
+ unimplemented!()
+ }
+}