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_int =
|
||||
take_while1 (function '0' .. '9' -> true | _ -> false)
|
||||
>>| Int64.of_string
|
||||
>>| Int64.of_string_opt
|
||||
>>= function
|
||||
| None -> fail "invalid integer"
|
||||
| Some n -> return n
|
||||
in
|
||||
let parse_t =
|
||||
lift4
|
||||
(fun sign currency value fraction ->
|
||||
{ sign; currency; value; fraction })
|
||||
make ~sign ~currency ~value ~fraction)
|
||||
parse_sign parse_currency
|
||||
(char ':' *> parse_int)
|
||||
(char '.' *> parse_int)
|
||||
in
|
||||
fun s ->
|
||||
match parse_string ~consume:Consume.All parse_t s with
|
||||
| Ok v -> Ok v
|
||||
| Error e -> Error e
|
||||
fun s -> parse_string ~consume:Consume.All parse_t s |> Result.join
|
||||
end
|
||||
|
||||
module Eddsa = struct
|
||||
|
|
|
|||
|
|
@ -32,4 +32,8 @@ let () =
|
|||
let s = to_string v in
|
||||
let v' = of_string s |> Result.get_ok in
|
||||
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