diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/qualified_name.ml | 20 | ||||
| -rw-r--r-- | lib/qualified_name.mli | 8 |
2 files changed, 13 insertions, 15 deletions
diff --git a/lib/qualified_name.ml b/lib/qualified_name.ml index a67f815..a73774e 100644 --- a/lib/qualified_name.ml +++ b/lib/qualified_name.ml @@ -4,19 +4,21 @@ further colons are part of the relation name verbatim. Examples: - - ["warehouse:orders"] -> mg=["warehouse"], name=["orders"] + - ["warehouse:orders"] -> mg=["warehouse"], name=["orders"] - ["warehouse:public:orders"] -> mg=["warehouse"], name=["public:orders"] - - ["sakura:public:relation"] -> mg=["sakura"], name=["public:relation"] + - ["sakura:public:relation"] -> mg=["sakura"], name=["public:relation"] A reference with no leading [<mg>:] segment is a parse error — callers must supply the mg explicitly. *) -type t = { mg : string; name : string } +type t = {mg: string; name: string} module Error = struct open Condition - let unqualified_name name = condition "unqualified-name" "A qualified name was expected, but an unqualified one was given" - ("name" |=| (of_string name)) + + let unqualified_name name = + condition "unqualified-name" "A qualified name was expected, but an unqualified one was given" + ("name" |=| of_string name) end exception Unqualified of string @@ -27,12 +29,10 @@ let parse (s : string) : t = | Some i -> let mg = String.sub s 0 i in let name = String.sub s (i + 1) (String.length s - i - 1) in - if mg = "" || name = "" then raise (Unqualified s) - else { mg; name } + if mg = "" || name = "" then raise (Unqualified s) else {mg; name} let try_parse (s : string) : (t, Condition.t) result = try Ok (parse s) with Unqualified s -> Error (Error.unqualified_name s) -let make ~mg ~name = { mg; name } - -let to_string { mg; name } = mg ^ ":" ^ name +let make ~mg ~name = {mg; name} +let to_string {mg; name} = mg ^ ":" ^ name diff --git a/lib/qualified_name.mli b/lib/qualified_name.mli index 0e39ff2..15f80d1 100644 --- a/lib/qualified_name.mli +++ b/lib/qualified_name.mli @@ -3,16 +3,14 @@ The first colon separates the multigroup name from the relation name; any further colons are part of the relation name verbatim. *) -type t = { mg : string; name : string } +type t = {mg: string; name: string} exception Unqualified of string +(** Splits on the first [:]. Raises [Unqualified] when no mg segment is present + (i.e. no colon, or empty mg / empty name). *) val parse : string -> t -(** Splits on the first [:]. Raises [Unqualified] when no mg segment is - present (i.e. no colon, or empty mg / empty name). *) val try_parse : string -> (t, Condition.t) result - val make : mg:string -> name:string -> t - val to_string : t -> string |
