Micheline: more compact encoding of annotations
This commit is contained in:
parent
1fccffb61c
commit
ec648f5397
@ -134,13 +134,25 @@ let canonical_encoding ~variant prim_encoding =
|
|||||||
~title:"Sequence"
|
~title:"Sequence"
|
||||||
(function Seq (_, v) -> Some v | _ -> None)
|
(function Seq (_, v) -> Some v | _ -> None)
|
||||||
(fun args -> Seq (0, args)) in
|
(fun args -> Seq (0, args)) in
|
||||||
let byte_string = Bounded.string 255 in
|
let annots_encoding =
|
||||||
|
let split s =
|
||||||
|
let annots = String.split_on_char ' ' s in
|
||||||
|
List.iter (fun a ->
|
||||||
|
if String.length a > 255 then failwith "Oversized annotation"
|
||||||
|
) annots;
|
||||||
|
if String.concat " " annots <> s then
|
||||||
|
failwith "Invalid annotation string, \
|
||||||
|
must be a sequence of valid annotations with spaces" ;
|
||||||
|
annots in
|
||||||
|
splitted
|
||||||
|
~json:(list (Bounded.string 255))
|
||||||
|
~binary:(conv (String.concat " ") split string) in
|
||||||
let application_encoding tag expr_encoding =
|
let application_encoding tag expr_encoding =
|
||||||
case tag
|
case tag
|
||||||
~title:"Generic prim (any number of args with or without annot)"
|
~title:"Generic prim (any number of args with or without annot)"
|
||||||
(obj3 (req "prim" prim_encoding)
|
(obj3 (req "prim" prim_encoding)
|
||||||
(dft "args" (list expr_encoding) [])
|
(dft "args" (list expr_encoding) [])
|
||||||
(dft "annots" (list byte_string) []))
|
(dft "annots" annots_encoding []))
|
||||||
(function Prim (_, prim, args, annots) -> Some (prim, args, annots)
|
(function Prim (_, prim, args, annots) -> Some (prim, args, annots)
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
(fun (prim, args, annots) -> Prim (0, prim, args, annots)) in
|
(fun (prim, args, annots) -> Prim (0, prim, args, annots)) in
|
||||||
@ -166,7 +178,7 @@ let canonical_encoding ~variant prim_encoding =
|
|||||||
case (Tag 4)
|
case (Tag 4)
|
||||||
~title:"Prim (no args + annot)"
|
~title:"Prim (no args + annot)"
|
||||||
(obj2 (req "prim" prim_encoding)
|
(obj2 (req "prim" prim_encoding)
|
||||||
(req "annots" (list byte_string)))
|
(req "annots" annots_encoding))
|
||||||
(function
|
(function
|
||||||
| Prim (_, v, [], annots) -> Some (v, annots)
|
| Prim (_, v, [], annots) -> Some (v, annots)
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
@ -185,7 +197,7 @@ let canonical_encoding ~variant prim_encoding =
|
|||||||
~title:"Prim (1 arg + annot)"
|
~title:"Prim (1 arg + annot)"
|
||||||
(obj3 (req "prim" prim_encoding)
|
(obj3 (req "prim" prim_encoding)
|
||||||
(req "arg" expr_encoding)
|
(req "arg" expr_encoding)
|
||||||
(req "annots" (list byte_string)))
|
(req "annots" annots_encoding))
|
||||||
(function
|
(function
|
||||||
| Prim (_, prim, [ arg ], annots) -> Some (prim, arg, annots)
|
| Prim (_, prim, [ arg ], annots) -> Some (prim, arg, annots)
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
@ -206,7 +218,7 @@ let canonical_encoding ~variant prim_encoding =
|
|||||||
(obj4 (req "prim" prim_encoding)
|
(obj4 (req "prim" prim_encoding)
|
||||||
(req "arg1" expr_encoding)
|
(req "arg1" expr_encoding)
|
||||||
(req "arg2" expr_encoding)
|
(req "arg2" expr_encoding)
|
||||||
(req "annots" (list byte_string)))
|
(req "annots" annots_encoding))
|
||||||
(function
|
(function
|
||||||
| Prim (_, prim, [ arg1 ; arg2 ], annots) -> Some (prim, arg1, arg2, annots)
|
| Prim (_, prim, [ arg1 ; arg2 ], annots) -> Some (prim, arg1, arg2, annots)
|
||||||
| _ -> None)
|
| _ -> None)
|
||||||
|
Loading…
Reference in New Issue
Block a user