code: @Override
      public Object fromProto(Value any) {
          switch (any.getKindCase()) {
              case NULL_VALUE:
                  return null;
              case BOOL_VALUE:
                  return any.getBoolValue();
              case NUMBER_VALUE:
                  return any.getNumberValue();
              case STRING_VALUE:
                  return any.getStringValue();
              case STRUCT_VALUE:
                  Struct struct = any.getStructValue();
                  Map<String, Object> map = new HashMap<>();
                  for (Map.Entry<String, Value> pair : struct.getFieldsMap().entrySet()) {
                      map.put(pair.getKey(), fromProto(pair.getValue()));
                  }
                  return map;
              case LIST_VALUE:
                  List<Object> list = new ArrayList<>();
                  for (Value val : any.getListValue().getValuesList()) {
                      list.add(fromProto(val));
                  }
                  return list;
              default:
                  throw new ClassCastException("unset Value element: "+any);
          }
      }
docs: Convert a ProtoBuf {@link Value} message into its native Java object
  equivalent.
  
  See {@link ProtoMapper#toProto(Object)} for the reverse mapping and the
  possible values that can be returned from this method.
  
  @param any an instance of a ProtoBuf {@link Value} message
  @return a native Java object representing the value