fix amount parser
todo: private type
This commit is contained in:
parent
a04e179c08
commit
cdd6d5142b
2 changed files with 10 additions and 6 deletions
12
src/types.ml
12
src/types.ml
|
|
@ -95,20 +95,20 @@ module Amount = struct
|
||||||
let parse_currency = string "EUR" *> return `Eur in
|
let parse_currency = string "EUR" *> return `Eur in
|
||||||
let parse_int =
|
let parse_int =
|
||||||
take_while1 (function '0' .. '9' -> true | _ -> false)
|
take_while1 (function '0' .. '9' -> true | _ -> false)
|
||||||
>>| Int64.of_string
|
>>| Int64.of_string_opt
|
||||||
|
>>= function
|
||||||
|
| None -> fail "invalid integer"
|
||||||
|
| Some n -> return n
|
||||||
in
|
in
|
||||||
let parse_t =
|
let parse_t =
|
||||||
lift4
|
lift4
|
||||||
(fun sign currency value fraction ->
|
(fun sign currency value fraction ->
|
||||||
{ sign; currency; value; fraction })
|
make ~sign ~currency ~value ~fraction)
|
||||||
parse_sign parse_currency
|
parse_sign parse_currency
|
||||||
(char ':' *> parse_int)
|
(char ':' *> parse_int)
|
||||||
(char '.' *> parse_int)
|
(char '.' *> parse_int)
|
||||||
in
|
in
|
||||||
fun s ->
|
fun s -> parse_string ~consume:Consume.All parse_t s |> Result.join
|
||||||
match parse_string ~consume:Consume.All parse_t s with
|
|
||||||
| Ok v -> Ok v
|
|
||||||
| Error e -> Error e
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module Eddsa = struct
|
module Eddsa = struct
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,8 @@ let () =
|
||||||
let s = to_string v in
|
let s = to_string v in
|
||||||
let v' = of_string s |> Result.get_ok in
|
let v' = of_string s |> Result.get_ok in
|
||||||
assert (v = v');
|
assert (v = v');
|
||||||
|
let r = of_string {|~EUR:4.9|} in
|
||||||
|
assert (Result.is_error r);
|
||||||
|
let r = of_string {|+EUR:4.99999999999999999999999|} in
|
||||||
|
assert (Result.is_error r);
|
||||||
()
|
()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue