fix(s3-csv): clarify naming of CSV container concepts
Co-Authored-By: Ilya Averyanov <av@rubybox.dev>
This commit is contained in:
parent
83366cbed0
commit
4bea938ef2
|
@ -16,14 +16,22 @@
|
|||
|
||||
-record(csv, {
|
||||
columns :: [binary()] | undefined,
|
||||
order :: [binary()],
|
||||
separator :: char() | iodata(),
|
||||
delimiter :: char() | iodata(),
|
||||
column_order :: [binary()],
|
||||
%% A string or character that separates each field in a record from the next.
|
||||
%% Default: ","
|
||||
field_separator :: char() | iodata(),
|
||||
%% A string or character that delimits boundaries of a record.
|
||||
%% Default: "\n"
|
||||
record_delimiter :: char() | iodata(),
|
||||
quoting_mp :: _ReMP
|
||||
}).
|
||||
|
||||
-type container() :: #csv{}.
|
||||
-type options() :: #{column_order => [column()]}.
|
||||
|
||||
-type options() :: #{
|
||||
%% Which columns have to be ordered first in the resulting CSV?
|
||||
column_order => [column()]
|
||||
}.
|
||||
|
||||
-type record() :: emqx_bridge_s3_aggregator:record().
|
||||
-type column() :: binary().
|
||||
|
@ -34,9 +42,9 @@
|
|||
new(Opts) ->
|
||||
{ok, MP} = re:compile("[\\[\\],\\r\\n\"]", [unicode]),
|
||||
#csv{
|
||||
order = maps:get(column_order, Opts, []),
|
||||
separator = $,,
|
||||
delimiter = $\n,
|
||||
column_order = maps:get(column_order, Opts, []),
|
||||
field_separator = $,,
|
||||
record_delimiter = $\n,
|
||||
quoting_mp = MP
|
||||
}.
|
||||
|
||||
|
@ -56,28 +64,28 @@ close(#csv{}) ->
|
|||
|
||||
%%
|
||||
|
||||
mk_columns(Record, #csv{order = ColumnOrder}) ->
|
||||
mk_columns(Record, #csv{column_order = ColumnOrder}) ->
|
||||
Columns = [emqx_utils_conv:bin(C) || C <- lists:sort(maps:keys(Record))],
|
||||
Unoredered = Columns -- ColumnOrder,
|
||||
ColumnOrder ++ Unoredered.
|
||||
|
||||
-spec emit_header([column()], container()) -> iodata().
|
||||
emit_header([C], #csv{delimiter = Delim}) ->
|
||||
emit_header([C], #csv{record_delimiter = Delim}) ->
|
||||
[C, Delim];
|
||||
emit_header([C | Rest], CSV = #csv{separator = Sep}) ->
|
||||
emit_header([C | Rest], CSV = #csv{field_separator = Sep}) ->
|
||||
[C, Sep | emit_header(Rest, CSV)];
|
||||
emit_header([], #csv{delimiter = Delim}) ->
|
||||
emit_header([], #csv{record_delimiter = Delim}) ->
|
||||
[Delim].
|
||||
|
||||
-spec emit_row(record(), container()) -> iodata().
|
||||
emit_row(Record, CSV = #csv{columns = Columns}) ->
|
||||
emit_row(Record, Columns, CSV).
|
||||
|
||||
emit_row(Record, [C], CSV = #csv{delimiter = Delim}) ->
|
||||
emit_row(Record, [C], CSV = #csv{record_delimiter = Delim}) ->
|
||||
[emit_cell(C, Record, CSV), Delim];
|
||||
emit_row(Record, [C | Rest], CSV = #csv{separator = Sep}) ->
|
||||
emit_row(Record, [C | Rest], CSV = #csv{field_separator = Sep}) ->
|
||||
[emit_cell(C, Record, CSV), Sep | emit_row(Record, Rest, CSV)];
|
||||
emit_row(#{}, [], #csv{delimiter = Delim}) ->
|
||||
emit_row(#{}, [], #csv{record_delimiter = Delim}) ->
|
||||
[Delim].
|
||||
|
||||
emit_cell(Column, Record, CSV) ->
|
||||
|
|
Loading…
Reference in New Issue