From f00c7c0667f7e94edc47809bd4b83de060d88a7d Mon Sep 17 00:00:00 2001
From: Milo Davis <davis.mil@husky.neu.edu>
Date: Wed, 10 Jan 2018 20:41:52 -0500
Subject: [PATCH] Data encoding: fail on string_enum that should be a constant

---
 src/lib_data_encoding/data_encoding.ml | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/lib_data_encoding/data_encoding.ml b/src/lib_data_encoding/data_encoding.ml
index a919fcc5b..c19de8b8b 100644
--- a/src/lib_data_encoding/data_encoding.ml
+++ b/src/lib_data_encoding/data_encoding.ml
@@ -535,11 +535,14 @@ module Encoding = struct
   let array e = dynamic_size (Variable.array e)
   let list e = dynamic_size (Variable.list e)
 
-  let string_enum cases =
-    let arr = Array.of_list (List.map snd cases) in
-    let tbl = Hashtbl.create (Array.length arr) in
-    List.iteri (fun ind (str, a) -> Hashtbl.add tbl a (str, ind)) cases ;
-    make @@ String_enum (tbl, arr)
+  let string_enum = function
+    | [] -> invalid_arg "data_encoding.string_enum: cannot have zero cases"
+    | [ _case ] -> invalid_arg "data_encoding.string_enum: cannot have a single case, use constant instead"
+    | _ :: _ as cases ->
+        let arr = Array.of_list (List.map snd cases) in
+        let tbl = Hashtbl.create (Array.length arr) in
+        List.iteri (fun ind (str, a) -> Hashtbl.add tbl a (str, ind)) cases ;
+        make @@ String_enum (tbl, arr)
 
   let conv proj inj ?schema encoding =
     make @@ Conv { proj ; inj ; encoding ; schema }