Currently, the cluster verify errors are defined as follows:
CV_ECLUSTER_FOO = (TCLUSTER, "ECLUSTER_FOO", "description")
This means there's no standalone name for the string "ECLUSTER_FOO",
which makes it hard to derive automatically a type for this union in
Haskell.
There are three possible fixes:
- manually separate the CV_ECLUSTER_FOO_STR = "ECLUSTER_FOO" in
constants.py
- manually extract the strings in Haskell code
- change convert-constants to automatically export virtual constants
for those
After discussion on IRC, I've taken the latter approach; even though a
bit hack-ish, it avoids manual work and potential errors.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
value[k], all_items))
elif isinstance(value, tuple):
tvs = [HaskellTypeVal(elem) for elem in value]
+ # Custom rule for special cluster verify error tuples
+ if name.startswith("CV_E") and len(value) == 3 and tvs[1][0] is not None:
+ cv_ename = hs_name + "Code"
+ lines.append("-- | Special cluster verify code %s" % name)
+ lines.append("%s :: %s" % (cv_ename, tvs[1][0]))
+ lines.append("%s = %s" % (cv_ename, tvs[1][1]))
+ lines.append("")
if compat.all(e is not None for e in tvs):
ttypes = ", ".join(e[0] for e in tvs)
tvals = FormatListElems(all_items, pfx_name, value, [e[1] for e in tvs])