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/reflect/optional.rs b/src/reflect/optional.rs
new file mode 100644
index 0000000..4d33752
--- /dev/null
+++ b/src/reflect/optional.rs
@@ -0,0 +1,50 @@
+use std::mem;
+
+use super::value::ProtobufValue;
+
+use singular::*;
+
+pub trait ReflectOptional: 'static {
+    fn to_option(&self) -> Option<&ProtobufValue>;
+
+    fn set_value(&mut self, value: &ProtobufValue);
+}
+
+impl<V: ProtobufValue + Clone + 'static> ReflectOptional for Option<V> {
+    fn to_option(&self) -> Option<&ProtobufValue> {
+        self.as_ref().map(|v| v as &ProtobufValue)
+    }
+
+    fn set_value(&mut self, value: &ProtobufValue) {
+        match value.as_any().downcast_ref::<V>() {
+            Some(v) => mem::replace(self, Some(v.clone())),
+            None => panic!(),
+        };
+    }
+}
+
+impl<V: ProtobufValue + Clone + 'static> ReflectOptional for SingularField<V> {
+    fn to_option(&self) -> Option<&ProtobufValue> {
+        self.as_ref().map(|v| v as &ProtobufValue)
+    }
+
+    fn set_value(&mut self, value: &ProtobufValue) {
+        match value.as_any().downcast_ref::<V>() {
+            Some(v) => mem::replace(self, SingularField::some(v.clone())),
+            None => panic!(),
+        };
+    }
+}
+
+impl<V: ProtobufValue + Clone + 'static> ReflectOptional for SingularPtrField<V> {
+    fn to_option(&self) -> Option<&ProtobufValue> {
+        self.as_ref().map(|v| v as &ProtobufValue)
+    }
+
+    fn set_value(&mut self, value: &ProtobufValue) {
+        match value.as_any().downcast_ref::<V>() {
+            Some(v) => mem::replace(self, SingularPtrField::some(v.clone())),
+            None => panic!(),
+        };
+    }
+}