Hey @dimitarvp
I really appreciate your time for this, thanks for your response.
Here is what I meant,
message PostResponse {
bool active = 1;
bool anonymous = 2;
string content = 3;
repeated string group_id = 4;
string id = 5;
string user_id = 6;
repeated MediaResponse media = 7;
PollsResponse polls = 8;
bool sensitive = 9;
google.protobuf.Timestamp inserted_at = 10;
google.protobuf.Timestamp updated_at = 11;
}
message MediaResponse {
string src = 1;
enum MediaType {
IMAGE = 0;
VIDEO = 1;
}
MediaType type = 2;
int32 order = 3;
string caption = 4;
bool active = 5;
string post_id = 6;
google.protobuf.Timestamp inserted_at = 7;
google.protobuf.Timestamp updated_at = 8;
}
message PollsResponse {
bool active = 1;
string id = 2;
repeated PollOptionsResponse poll_options = 3;
string post_id = 4;
string summary = 5;
string title = 6;
google.protobuf.Timestamp start_date = 7;
google.protobuf.Timestamp end_date = 8;
google.protobuf.Timestamp inserted_at = 9;
google.protobuf.Timestamp updated_at = 10;
}
message PollOptionsResponse {
bool active = 1;
string context = 2;
string id = 3;
string polls_id = 4;
repeated PollVotesResponse poll_votes = 5;
google.protobuf.Timestamp inserted_at = 6;
google.protobuf.Timestamp updated_at = 7;
}
message PollVotesResponse {
string id = 1;
bool active = 2;
string user_id = 3;
string context = 4;
string poll_options_id = 5;
google.protobuf.Timestamp inserted_at = 6;
google.protobuf.Timestamp updated_at = 7;
}
and In elixir, the response looks like
%TwitterProto.PostResponse{
active: true,
anonymous: false,
content: "Some content in here",
group_id: ["547bd541-880b-4bd0-8b41-3e19e23f3064",
"c2edaa11-1915-4212-8bf4-3fba1ca286a3"],
id: "65dfc815-62f3-4a8e-b31d-05b87ea0e902",
media: [
%Twitter.MediaResponse{
active: true,
caption: "",
order: 1,
post_id: "65dfc815-62f3-4a8e-b31d-05b87ea0e902",
src: "",
type: :IMAGE
},
%Twitter.MediaResponse{
active: true,
caption: "",
order: 2,
post_id: "65dfc815-62f3-4a8e-b31d-05b87ea0e902",
src: "",
type: :IMAGE
}
],
polls: %TwitterProto.PollsResponse{
active: true,
id: "2843684e-1d00-4208-a88d-ed980071d807",
poll_options: [
%TwitterProto.PollOptionsResponse{
active: true,
context: "Yes",
id: "b7c20db7-09d2-4087-a55d-32bc356aa2d3",
poll_votes: [],
polls_id: "2843684e-1d00-4208-a88d-ed980071d807"
},
%TwitterProto.PollOptionsResponse{
active: true,
context: "No",
id: "cefe92a1-a52e-436c-a48d-7da84af81fc4",
poll_votes: [],
polls_id: "2843684e-1d00-4208-a88d-ed980071d807"
},
%TwitterProto.PollOptionsResponse{
active: true,
context: "Maybe",
id: "41e727ed-2c55-4d8c-a2bd-fb4fe66c5f3c",
poll_votes: [
%{}, %{}, %{} .... 10_00_0000
],
polls_id: "2843684e-1d00-4208-a88d-ed980071d807"
}
],
post_id: "65dfc815-62f3-4a8e-b31d-05b87ea0e902",
summary: "",
title: "Are you willing to join ARMY??"
},
sensitive: false,
user_id: "ad29e49a-5e61-43cf-ab85-438f2ee9fb16"
}
the above response will have multiple nested maps with timestamp()
fields, so if I parse after fetching the data from DB, I have to loop through all the nested maps, and also I feel like it won’t be generic. Is there a way or any suggestion to achieve this in a generic way??