anchor.diff:  get_column_types(ColumnNames, Mod) ->
       [Mod:get_field_type([ColumnName]) || ColumnName <- ColumnNames].
   
  --spec make_tscolumndescription_list(list(binary()), list(riak_pb_ts_codec:tscolumntype())) -> list(#tscolumndescription{}).
  +-spec make_tscolumndescription_list(list(binary()), list(riak_pb_ts_codec:tscolumntype())) ->
  +                                           list(#tscolumndescription{}).
   make_tscolumndescription_list(ColumnNames, ColumnTypes) ->
     [#tscolumndescription{name = Name, type = riak_pb_ts_codec:encode_field_type(Type)}
       || {Name, Type} <- lists:zip(ColumnNames, ColumnTypes)].
  
positive.code:                     %% names; we need names with types, so:
                      ColumnTypes = get_column_types(ColumnNames, Mod),
                      Rows = riak_pb_ts_codec:encode_rows(ColumnTypes, [Row]),
                      {reply, #tsgetresp{columns = make_tscolumndescription_list(ColumnNames, ColumnTypes),
                                         rows = Rows}, State};
                  {error, {bad_key_length, Got, Need}} ->
                      {reply, key_element_count_mismatch(Got, Need), State};
  
negative.code: %% under the License.
  %%
  %% -------------------------------------------------------------------
  %% @doc Callbacks for TS protobuf messages [codes 90..99]
  
  -module(riak_kv_pb_timeseries).
  
  