Skip to content

Commit d65f48c

Browse files
authored
implement enums (#10)
1 parent 107f1c3 commit d65f48c

10 files changed

Lines changed: 179 additions & 130 deletions

File tree

lib/header.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ open Sexplib.Std
22

33
module T = struct
44
type t =
5+
| Enum of string * string (* (type * name) *)
56
| String of string
67
| Boolean of string
78
| Float of string
@@ -14,6 +15,7 @@ module T = struct
1415

1516
let to_string hdr =
1617
match hdr with
18+
| Enum (t, s) -> s ^ ": " ^ t ^ ";"
1719
| String s -> s ^ ": string;"
1820
| Boolean s -> s ^ ": boolean;"
1921
| Float s -> s ^ ": number;"
@@ -23,6 +25,7 @@ module T = struct
2325

2426
let get_string hdr =
2527
match hdr with
28+
| Enum (_, s) -> s
2629
| String s -> s
2730
| Boolean s -> s
2831
| Float s -> s

lib/header.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module T : sig
22
type t =
3+
| Enum of string * string (* (type * name) *)
34
| String of string
45
| Boolean of string
56
| Float of string

lib/literal.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ open Sexplib.Std
22

33
module T = struct
44
type t =
5+
| Enum of string * string
56
| String of string
67
| Integer of int
78
| Float of float
@@ -14,6 +15,7 @@ module T = struct
1415

1516
let get_type t =
1617
match t with
18+
| Enum (t, _) -> t
1719
| String _ -> "string"
1820
| Integer _ -> "number"
1921
| Float _ -> "number"
@@ -22,6 +24,7 @@ module T = struct
2224

2325
let get_value t =
2426
match t with
27+
| Enum (_, e) -> e
2528
| String s -> Util.T.quote s
2629
| Integer i -> string_of_int i
2730
| Float f -> string_of_float f

lib/literal.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module T : sig
22
type t =
3+
| Enum of string * string
34
| String of string
45
| Integer of int
56
| Float of float

lib/record.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ open Sexplib.Std
22

33
module Value = struct
44
type record_type =
5+
| Enum of string
56
| String of string
67
| Integer of int
78
| Float of float
@@ -14,6 +15,11 @@ module Value = struct
1415
}
1516
[@@deriving sexp]
1617

18+
let parse_enum str =
19+
if not (Variable.T.is_valid str) then failwith ("invalid enum name " ^ str);
20+
Enum str
21+
;;
22+
1723
let parse_string str = String str
1824

1925
let parse_boolean str =
@@ -38,6 +44,7 @@ module Value = struct
3844

3945
let from_header (header, element) =
4046
match (header : Header.T.t) with
47+
| Enum (_, name) -> { name; value = parse_enum element }
4148
| String name -> { name; value = parse_string element }
4249
| Boolean name -> { name; value = parse_boolean element }
4350
| Integer name -> { name; value = parse_integer element }
@@ -46,6 +53,7 @@ module Value = struct
4653

4754
let get_value t =
4855
match t with
56+
| Enum e -> e
4957
| String s -> Util.T.quote s
5058
| Integer i -> string_of_int i
5159
| Float f -> string_of_float f

lib/record.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module Value : sig
22
type record_type =
3+
| Enum of string
34
| String of string
45
| Integer of int
56
| Float of float
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
(Enum Something a)
2+
A
3+
B
4+
C
5+
D
6+
E

test/expect_tests/cases/data/sample_spreadsheet_long.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(String a),(String b),(String c),(Float ab),(Integer bc),(Boolean cd),(Number de)
1+
(Enum Type a),(String b),(String c),(Float ab),(Integer bc),(Boolean cd),(Number de)
22
Alpha,Beta,Gamma,0.5,10,true,3
33
Delta,Echo,Foxtrot,1.2,21,false,7
44
Giga,Hera,Iota,2.4,32,true,5
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
(
2+
(Import ((var Something) (from some-file.ts)))
3+
(ReadSpreadsheet ((var "SOME_SHEET") (interface "Type") (path (Csv "./data/sample_spreadsheet_enums.csv"))))
4+
(Export Stdout)
5+
)

test/expect_tests/end_to_end_program_tests.ml

Lines changed: 150 additions & 129 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)