···427427428428(* {1 Streaming I/O} *)
429429430430-let read codec reader =
430430+let decode codec reader =
431431 let s = Bytesrw.Bytes.Reader.to_string reader in
432432 decode_string codec s
433433434434-let write codec rows writer =
434434+let encode codec rows writer =
435435 let w s = Bytesrw.Bytes.Writer.write_string writer s in
436436 let header = encode_header codec in
437437 w (String.concat "," (Array.to_list header));
+6-8
lib/csvt.mli
···7788 Csvt defines a generalized algebraic datatype whose values denote
99 bidirectional maps between CSV data and the OCaml values of your choice,
1010- following the {e finally tagged} approach from
1010+ based on the {e finally tagged} approach from
1111 {{:https://github.com/dbuenzli/jsont/blob/main/paper/soup.tex}An alphabet
1212 for your data soups} by Daniel Bünzli. Field-level and row-level codecs
1313 share a single type {!t}. Row codecs are built declaratively using
1414- constructors and field accessors with the {!Row} builder. See
1515- {{:https://erratique.ch/repos/jsont/paper/soup.pdf}An alphabet for your data
1616- soups} for the technique.
1414+ constructors and field accessors with the {!Row} builder.
17151816 {2 Quick Start}
1917···203201204202(** {1:bytesrw Streaming I/O} *)
205203206206-val read : 'a t -> Bytesrw.Bytes.Reader.t -> ('a list, error) result
207207-(** [read t r] reads CSV data from reader [r] and decodes all rows. *)
204204+val decode : 'a t -> Bytesrw.Bytes.Reader.t -> ('a list, error) result
205205+(** [decode t r] reads CSV data from reader [r] and decodes all rows. *)
208206209209-val write : 'a t -> 'a list -> Bytesrw.Bytes.Writer.t -> unit
210210-(** [write t rows w] encodes [rows] as CSV and writes them to writer [w]. *)
207207+val encode : 'a t -> 'a list -> Bytesrw.Bytes.Writer.t -> unit
208208+(** [encode t rows w] encodes [rows] as CSV and writes them to writer [w]. *)
+10-10
test/test_csvt.ml
···496496let test_read_simple () =
497497 let csv = "x,y,label\n1.0,2.0,origin\n3.5,4.5,target\n" in
498498 let reader = Bytesrw.Bytes.Reader.of_string csv in
499499- match Csvt.read point_codec reader with
499499+ match Csvt.decode point_codec reader with
500500 | Error e -> Alcotest.failf "read failed: %s" (Csvt.error_to_string e)
501501 | Ok points ->
502502 Alcotest.(check int) "count" 2 (List.length points);
···514514 in
515515 let buf = Buffer.create 64 in
516516 let writer = Bytesrw.Bytes.Writer.of_buffer buf in
517517- Csvt.write point_codec points writer;
517517+ Csvt.encode point_codec points writer;
518518 Bytesrw.Bytes.Writer.write_eod writer;
519519 let result = Buffer.contents buf in
520520 (* Verify the header is present *)
···541541 (* Write to buffer *)
542542 let buf = Buffer.create 64 in
543543 let writer = Bytesrw.Bytes.Writer.of_buffer buf in
544544- Csvt.write point_codec points writer;
544544+ Csvt.encode point_codec points writer;
545545 Bytesrw.Bytes.Writer.write_eod writer;
546546 (* Read back *)
547547 let reader = Bytesrw.Bytes.Reader.of_string (Buffer.contents buf) in
548548- match Csvt.read point_codec reader with
548548+ match Csvt.decode point_codec reader with
549549 | Error e -> Alcotest.failf "roundtrip failed: %s" (Csvt.error_to_string e)
550550 | Ok points' ->
551551 Alcotest.(check int) "count" 2 (List.length points');
···566566 in
567567 let buf = Buffer.create 64 in
568568 let writer = Bytesrw.Bytes.Writer.of_buffer buf in
569569- Csvt.write record_codec records writer;
569569+ Csvt.encode record_codec records writer;
570570 Bytesrw.Bytes.Writer.write_eod writer;
571571 let result = Buffer.contents buf in
572572 match Csvt.decode_string record_codec result with
···581581let test_write_empty () =
582582 let buf = Buffer.create 64 in
583583 let writer = Bytesrw.Bytes.Writer.of_buffer buf in
584584- Csvt.write point_codec [] writer;
584584+ Csvt.encode point_codec [] writer;
585585 Bytesrw.Bytes.Writer.write_eod writer;
586586 let result = Buffer.contents buf in
587587 (* Should still have a header *)
···756756 (* Custom codec *)
757757 Alcotest.test_case "col_map custom" `Quick test_col_map;
758758 (* Streaming I/O *)
759759- Alcotest.test_case "read simple" `Quick test_read_simple;
760760- Alcotest.test_case "write simple" `Quick test_write_simple;
761761- Alcotest.test_case "write multi-type" `Quick test_write_multi_type;
762762- Alcotest.test_case "write empty" `Quick test_write_empty;
759759+ Alcotest.test_case "decode reader" `Quick test_read_simple;
760760+ Alcotest.test_case "encode writer" `Quick test_write_simple;
761761+ Alcotest.test_case "encode writer multi-type" `Quick test_write_multi_type;
762762+ Alcotest.test_case "encode writer empty" `Quick test_write_empty;
763763 Alcotest.test_case "roundtrip streaming" `Quick test_roundtrip_streaming;
764764 (* Introspection *)
765765 Alcotest.test_case "col_names" `Quick test_col_names;