I have the below protocol buffer. Note that StockStatic is a repeated field.
message ServiceResponse
{
enum Type
{
REQUEST_FAILED = 1;
STOCK_STATIC_SNAPSHOT = 2;
}
message StockStaticSnapshot
{
repeated StockStatic stock_static = 1;
}
required Type type = 1;
optional StockStaticSnapshot stock_static_snapshot = 2;
}
message StockStatic
{
optional string sector = 1;
optional string subsector = 2;
}
I am filling out the StockStatic fields while iterating through a vector.
ServiceResponse.set_type(ServiceResponse_Type_STOCK_STATIC_SNAPSHOT);
ServiceResponse_StockStaticSnapshot stockStaticSnapshot;
for (vector<stockStaticInfo>::iterator it = m_staticStocks.begin(); it!= m_staticStocks.end(); ++it)
{
StockStatic* pStockStaticEntity = stockStaticSnapshot.add_stock_static();
SetStockStaticProtoFields(*it, pStockStaticEntity); // sets sector and subsector field to pStockStaticEntity by reading the fields using (*it)
}
But the above code is right only if StockStatic was an optional field and not a repeated field. My questions is what line of code am i missing to make it a repeated field?
From stackoverflow
-
Another way of accomplishing the same thing:
message SearchResponse { message Result { required string url = 1; optional string title = 2; repeated string snippets = 3; } repeated Result result = 1; }
-
No, you're doing the right thing.
Here's a snippet of my PB (detail ommited for brevity):
message DemandSummary { required uint32 solutionIndex = 1; required uint32 demandID = 2; } message ComputeResponse { repeated DemandSummary solutionInfo = 3; }
...and the C++ to fill up ComputeResponse::solutionInfo:
ComputeResponse response; for ( int i = 0; i < demList.size(); ++i ) { DemandSummary* summary = response->add_solutioninfo(); summary->set_solutionindex(solutionID); summary->set_demandid(demList[i].toUInt()); }
response.solutionInfo now contains demList.size() elements.
aajkaltak : Thank you.. I just realized the call to response->add_solutioninfo() ---- adds more than 1 element.. thank you!
0 comments:
Post a Comment