blob: edaa85bd7ad9e9ffab2fb6e19c90e68b33d42a03 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
(** Error types for manipulation operations *)
type t =
| RelationNotFound of string
| RelationAlreadyExists of string
| TupleNotFound of Conventions.Hash.t
| DuplicateTuple of Conventions.Hash.t
| ConstraintViolation of string
| StorageError of string
| UnrecognizedSublanguage of string
| MalformedExpression of Sexplib.Sexp.t
(* TODO: think of a better way to manage and serialize sublanguage errors *)
| SublanguageError of Sexplib.Sexp.t
| Conflict of { old_db : Management.Database.t; new_db : Management.Database.t}
| SyntaxError of string
let sexp_of_error e =
let open Sexplib.Sexp in
let error e ps = List (Atom e :: ps) in
let (<+>) key value = List [Atom key; value] in
match e with
(* TODO: think of a subset of common attributes that every error should have (message, etc)? *)
| RelationNotFound s -> error "relation-not-found" ["relation" <+> (Atom s)]
| RelationAlreadyExists s -> error "relation-already-exists" ["relation" <+> (Atom s)]
| TupleNotFound h -> error "tuple-not-found" ["hash" <+> (Atom h)]
| DuplicateTuple h -> error "duplicate-tuple" ["hash" <+> (Atom h)]
| ConstraintViolation s -> error "constraint-violation" ["message" <+> (Atom s)]
| StorageError s -> error "storage-error" ["message" <+> (Atom s)]
| UnrecognizedSublanguage s -> error "unrecognized-sublanguage" ["tag" <+> (Atom s)]
| MalformedExpression s -> error "malformed-expression" ["expression" <+> s]
| SublanguageError s -> error "sublanguage-error" ["error" <+> s]
| SyntaxError s -> error "syntax-error" ["message" <+> (Atom s)]
| Conflict { old_db; new_db } -> error "conflict" ["old-hash" <+> (Atom old_db.hash);
"new-hash" <+> (Atom new_db.hash)]
|