I have a struct generated by prost (protobuf implementation based on proto).
pub struct Data {
    #[prost(string, tag="1")]
    pub field1: ::prost::alloc::string::String,
    #[prost(message, optional, tag="2")]
    pub struct_2: ::core::option::Option<Struct2>,
    #[prost(message, optional, tag="3")]
    pub struct_3: ::core::option::Option<Struct3>,
    #[prost(string, tag="4")]
    pub test_param: ::prost::alloc::string::String,
}
I am able to decode the protobuf data from the above.
The catch is I receive some fields which are none in the above struct. only some fields are filled at any given time.
eg:
Data { field1: "testfield", struct_2: None, struct_3: None, test_param: "test" }
I want to be able to:
- select only non-none values from the struct.
 - Iterate over them and put them as a key value pair.
 
Eg:
let keyvalue = Hashmap::new()
for k,v in buffered_data.to_vector().iter() {
  if k.IsSome(){
    keyvalue.insert("k",v)   
  }
}
expected output would be something like:
keyvalue:
{
"field1":"test_field",
"test_param": "test"
}