+ AccountLimit
This commit is contained in:
parent
39d282dd80
commit
a862c199be
1 changed files with 61 additions and 5 deletions
66
src/api.ml
66
src/api.ml
|
|
@ -1,10 +1,10 @@
|
||||||
(* TODO
|
(* TODO
|
||||||
|
option:
|
||||||
|
- correct use opt_mem or Jsont.option
|
||||||
number
|
number
|
||||||
- number is "float", but we probably want int everywhere instead
|
- number is "float", but we probably want int everywhere instead
|
||||||
- numeric values capped at 2^53 -1 inclusive because json
|
- numeric values capped at 2^53 -1 inclusive because json
|
||||||
time
|
*)
|
||||||
- better types
|
|
||||||
- issues with "never" = uint64_max *)
|
|
||||||
open Crypto
|
open Crypto
|
||||||
open Bin_signature
|
open Bin_signature
|
||||||
|
|
||||||
|
|
@ -12,6 +12,36 @@ let encode_exn jsont v = Jsont_bytesrw.encode_string jsont v |> Result.get_ok
|
||||||
let encode jsont v = Jsont_bytesrw.encode_string jsont v
|
let encode jsont v = Jsont_bytesrw.encode_string jsont v
|
||||||
let decode jsont v = Jsont_bytesrw.decode_string jsont v
|
let decode jsont v = Jsont_bytesrw.decode_string jsont v
|
||||||
|
|
||||||
|
module Account_operation = struct
|
||||||
|
type t =
|
||||||
|
| Withdraw
|
||||||
|
| Deposit
|
||||||
|
| Merge
|
||||||
|
| Balance
|
||||||
|
| Close
|
||||||
|
| Aggregate
|
||||||
|
| Transaction
|
||||||
|
| Refund
|
||||||
|
|
||||||
|
let to_string t =
|
||||||
|
String.uppercase_ascii
|
||||||
|
@@
|
||||||
|
match t with
|
||||||
|
| Withdraw -> "withdraw"
|
||||||
|
| Deposit -> "deposit"
|
||||||
|
| Merge -> "merge"
|
||||||
|
| Balance -> "balance"
|
||||||
|
| Close -> "close"
|
||||||
|
| Aggregate -> "aggregate"
|
||||||
|
| Transaction -> "transaction"
|
||||||
|
| Refund -> "refund"
|
||||||
|
|
||||||
|
let jsont =
|
||||||
|
[ Withdraw; Deposit; Merge; Balance; Close; Aggregate; Transaction; Refund ]
|
||||||
|
|> List.map (fun t -> (to_string t, t))
|
||||||
|
|> Jsont.enum ~kind:"account operation type"
|
||||||
|
end
|
||||||
|
|
||||||
module ErrorDetail = struct
|
module ErrorDetail = struct
|
||||||
(* TODO GANA error codes
|
(* TODO GANA error codes
|
||||||
https://git.gnunet.org/gana.git/tree/gnu-taler-error-codes/registry.rec *)
|
https://git.gnunet.org/gana.git/tree/gnu-taler-error-codes/registry.rec *)
|
||||||
|
|
@ -26,7 +56,7 @@ module ErrorDetail = struct
|
||||||
let enc_hint v = v.hint in
|
let enc_hint v = v.hint in
|
||||||
Jsont.Object.map ~kind:"ErrorDetail" make
|
Jsont.Object.map ~kind:"ErrorDetail" make
|
||||||
|> Jsont.Object.mem "code" Jsont.int ~enc:enc_code
|
|> Jsont.Object.mem "code" Jsont.int ~enc:enc_code
|
||||||
|> Jsont.Object.opt_mem "hint" Jsont.(string) ~enc:enc_hint
|
|> Jsont.Object.opt_mem "hint" Jsont.string ~enc:enc_hint
|
||||||
|> Jsont.Object.finish
|
|> Jsont.Object.finish
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1000,7 +1030,8 @@ module RsaDenomGroup = struct
|
||||||
|> finish
|
|> finish
|
||||||
end
|
end
|
||||||
|
|
||||||
(* TODO better jsont cases
|
(* TODO cases
|
||||||
|
better jsont cases handling
|
||||||
factorize common fields (DenomCommon/DenomGroupCommon)
|
factorize common fields (DenomCommon/DenomGroupCommon)
|
||||||
"+age_restricted"/CS variants
|
"+age_restricted"/CS variants
|
||||||
raise error not implemented if not RSA *)
|
raise error not implemented if not RSA *)
|
||||||
|
|
@ -1018,3 +1049,28 @@ module DenomGroup = struct
|
||||||
|> case_mem "cipher" Jsont.string ~enc:Fun.id ~enc_case cases
|
|> case_mem "cipher" Jsont.string ~enc:Fun.id ~enc_case cases
|
||||||
|> finish
|
|> finish
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module AccountLimit = struct
|
||||||
|
type t = {
|
||||||
|
operation_type: Account_operation.t;
|
||||||
|
timeframe: RelativeTime.t;
|
||||||
|
threshold: Amount.t;
|
||||||
|
soft_limit: bool option;
|
||||||
|
}
|
||||||
|
|
||||||
|
let jsont =
|
||||||
|
let make operation_type timeframe threshold soft_limit =
|
||||||
|
{ operation_type; timeframe; threshold; soft_limit }
|
||||||
|
in
|
||||||
|
let operation_type v = v.operation_type in
|
||||||
|
let timeframe v = v.timeframe in
|
||||||
|
let threshold v = v.threshold in
|
||||||
|
let soft_limit v = v.soft_limit in
|
||||||
|
let open Jsont.Object in
|
||||||
|
map ~kind:"AccountLimit" make
|
||||||
|
|> mem "operation_type" Account_operation.jsont ~enc:operation_type
|
||||||
|
|> mem "timeframe" RelativeTime.jsont ~enc:timeframe
|
||||||
|
|> mem "threshold" Amount.jsont ~enc:threshold
|
||||||
|
|> opt_mem "soft_limit" Jsont.bool ~enc:soft_limit
|
||||||
|
|> finish
|
||||||
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue