have api.ml not depends on config.ml
This commit is contained in:
parent
5532798ea5
commit
f3483594ac
3 changed files with 63 additions and 79 deletions
59
src/api.ml
59
src/api.ml
|
|
@ -135,12 +135,41 @@ module ErrorDetail = struct
|
||||||
end
|
end
|
||||||
|
|
||||||
module CurrencySpecification = struct
|
module CurrencySpecification = struct
|
||||||
|
module Alt_unit_names = struct
|
||||||
|
open Syntax
|
||||||
|
module Int_map = Map.Make (Int)
|
||||||
|
module String_map = Map.Make (String)
|
||||||
|
|
||||||
|
type t = string Int_map.t
|
||||||
|
|
||||||
|
let jsont =
|
||||||
|
let of_string_map str_map =
|
||||||
|
str_map
|
||||||
|
|> String_map.to_list
|
||||||
|
|> list_map (fun (k, v) ->
|
||||||
|
match int_of_string_opt k with
|
||||||
|
| None -> Error "not an integer"
|
||||||
|
| Some k -> Ok (k, v))
|
||||||
|
|> function
|
||||||
|
| Error e -> Jsont.Error.msg Jsont.Meta.none e
|
||||||
|
| Ok l -> Int_map.of_list l
|
||||||
|
in
|
||||||
|
let to_string_map int_map =
|
||||||
|
int_map
|
||||||
|
|> Int_map.to_list
|
||||||
|
|> List.map (fun (k, v) -> (string_of_int k, v))
|
||||||
|
|> String_map.of_list
|
||||||
|
in
|
||||||
|
let string_map_jsont = Jsont.Object.as_string_map Jsont.string in
|
||||||
|
Jsont.map ~dec:of_string_map ~enc:to_string_map string_map_jsont
|
||||||
|
end
|
||||||
|
|
||||||
type t = {
|
type t = {
|
||||||
name: string;
|
name: string;
|
||||||
num_fractional_input_digits: int;
|
num_fractional_input_digits: int;
|
||||||
num_fractional_normal_digits: int;
|
num_fractional_normal_digits: int;
|
||||||
num_fractional_trailing_zero_digits: int;
|
num_fractional_trailing_zero_digits: int;
|
||||||
alt_unit_names: Config.Currency.Alt_unit_names.t;
|
alt_unit_names: Alt_unit_names.t;
|
||||||
common_amounts: Amount.t list;
|
common_amounts: Amount.t list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -172,8 +201,7 @@ module CurrencySpecification = struct
|
||||||
~enc:num_fractional_normal_digits
|
~enc:num_fractional_normal_digits
|
||||||
|> mem "num_fractional_trailing_zero_digits" Jsont.int
|
|> mem "num_fractional_trailing_zero_digits" Jsont.int
|
||||||
~enc:num_fractional_trailing_zero_digits
|
~enc:num_fractional_trailing_zero_digits
|
||||||
|> mem "alt_unit_names" Config.Currency.Alt_unit_names.jsont
|
|> mem "alt_unit_names" Alt_unit_names.jsont ~enc:alt_unit_names
|
||||||
~enc:alt_unit_names
|
|
||||||
|> mem "common_amounts" (Jsont.list Amount.jsont) ~enc:common_amounts
|
|> mem "common_amounts" (Jsont.list Amount.jsont) ~enc:common_amounts
|
||||||
|> finish
|
|> finish
|
||||||
end
|
end
|
||||||
|
|
@ -227,31 +255,6 @@ module ExchangeVersionResponse = struct
|
||||||
|> finish
|
|> finish
|
||||||
end
|
end
|
||||||
|
|
||||||
let currency_specification =
|
|
||||||
let open Config.Currency in
|
|
||||||
CurrencySpecification.
|
|
||||||
{
|
|
||||||
name= v.name;
|
|
||||||
num_fractional_input_digits= v.fractional_input_digits;
|
|
||||||
num_fractional_normal_digits= v.fractional_normal_digits;
|
|
||||||
num_fractional_trailing_zero_digits= v.fractional_trailing_zero_digits;
|
|
||||||
alt_unit_names= Config.Currency.v.alt_unit_names;
|
|
||||||
common_amounts= [];
|
|
||||||
}
|
|
||||||
|
|
||||||
let config =
|
|
||||||
ExchangeVersionResponse.
|
|
||||||
{
|
|
||||||
version= Libtool_version.mte_protocol_version;
|
|
||||||
name= "taler-exchange";
|
|
||||||
currency= Config.currency;
|
|
||||||
currency_specification;
|
|
||||||
implementation= None;
|
|
||||||
shopping_url= None;
|
|
||||||
open_banking_gateway= None;
|
|
||||||
aml_spa_dialect= None;
|
|
||||||
}
|
|
||||||
|
|
||||||
module RsaDenominationKey = struct
|
module RsaDenominationKey = struct
|
||||||
type t = {
|
type t = {
|
||||||
age_mask: int;
|
age_mask: int;
|
||||||
|
|
|
||||||
|
|
@ -86,35 +86,6 @@ module Exchangedb_postgres = struct
|
||||||
end
|
end
|
||||||
|
|
||||||
module Currency = struct
|
module Currency = struct
|
||||||
module Alt_unit_names = struct
|
|
||||||
open Syntax
|
|
||||||
module Int_map = Map.Make (Int)
|
|
||||||
module String_map = Map.Make (String)
|
|
||||||
|
|
||||||
type t = string Int_map.t
|
|
||||||
|
|
||||||
let jsont =
|
|
||||||
let of_string_map str_map =
|
|
||||||
str_map
|
|
||||||
|> String_map.to_list
|
|
||||||
|> list_map (fun (k, v) ->
|
|
||||||
match int_of_string_opt k with
|
|
||||||
| None -> Error "not an integer"
|
|
||||||
| Some k -> Ok (k, v))
|
|
||||||
|> function
|
|
||||||
| Error e -> Jsont.Error.msg Jsont.Meta.none e
|
|
||||||
| Ok l -> Int_map.of_list l
|
|
||||||
in
|
|
||||||
let to_string_map int_map =
|
|
||||||
int_map
|
|
||||||
|> Int_map.to_list
|
|
||||||
|> List.map (fun (k, v) -> (string_of_int k, v))
|
|
||||||
|> String_map.of_list
|
|
||||||
in
|
|
||||||
let string_map_jsont = Jsont.Object.as_string_map Jsont.string in
|
|
||||||
Jsont.map ~dec:of_string_map ~enc:to_string_map string_map_jsont
|
|
||||||
end
|
|
||||||
|
|
||||||
type t = {
|
type t = {
|
||||||
enabled: [ `YES | `NO ];
|
enabled: [ `YES | `NO ];
|
||||||
code: string;
|
code: string;
|
||||||
|
|
@ -122,7 +93,7 @@ module Currency = struct
|
||||||
fractional_input_digits: int;
|
fractional_input_digits: int;
|
||||||
fractional_normal_digits: int;
|
fractional_normal_digits: int;
|
||||||
fractional_trailing_zero_digits: int;
|
fractional_trailing_zero_digits: int;
|
||||||
alt_unit_names: Alt_unit_names.t;
|
alt_unit_names: Api.CurrencySpecification.Alt_unit_names.t;
|
||||||
}
|
}
|
||||||
|
|
||||||
let currency_sections =
|
let currency_sections =
|
||||||
|
|
@ -142,24 +113,31 @@ module Currency = struct
|
||||||
get "fractional_trailing_zero_digits" |> int;
|
get "fractional_trailing_zero_digits" |> int;
|
||||||
alt_unit_names=
|
alt_unit_names=
|
||||||
get "alt_unit_names"
|
get "alt_unit_names"
|
||||||
|> Jsont_bytesrw.decode_string Alt_unit_names.jsont
|
|> Jsont_bytesrw.decode_string
|
||||||
|
Api.CurrencySpecification.Alt_unit_names.jsont
|
||||||
|> unwrap_or_failure;
|
|> unwrap_or_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
let all_currencies = List.map parse_currency currency_sections
|
let specification =
|
||||||
|
currency_sections
|
||||||
let v =
|
|> List.map parse_currency
|
||||||
match
|
|> List.find_opt (fun v -> v.code = Exchange.currency)
|
||||||
List.find_opt (fun v -> v.code = Exchange.currency) all_currencies
|
|> function
|
||||||
with
|
|
||||||
| None ->
|
| None ->
|
||||||
failure
|
failure
|
||||||
"section `[currency-%s]` not found, currency `%s` is not defined"
|
"section `[currency-%s]` not found, currency `%s` is not defined"
|
||||||
Exchange.currency Exchange.currency
|
Exchange.currency Exchange.currency
|
||||||
| Some v -> (
|
| Some v when v.enabled <> `YES ->
|
||||||
match v.enabled = `YES with
|
failure "currency `%s` is not enabled" Exchange.currency
|
||||||
| false -> failure "currency `%s` is not enabled" Exchange.currency
|
| Some v ->
|
||||||
| true -> v)
|
{
|
||||||
|
Api.CurrencySpecification.name= v.name;
|
||||||
|
num_fractional_input_digits= v.fractional_input_digits;
|
||||||
|
num_fractional_normal_digits= v.fractional_normal_digits;
|
||||||
|
num_fractional_trailing_zero_digits= v.fractional_trailing_zero_digits;
|
||||||
|
alt_unit_names= v.alt_unit_names;
|
||||||
|
common_amounts= [];
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
module Coin = struct
|
module Coin = struct
|
||||||
|
|
|
||||||
|
|
@ -18,16 +18,19 @@ let seed req _server _env =
|
||||||
|
|
||||||
let config req _server _env =
|
let config req _server _env =
|
||||||
Logs.info (fun m -> m "GET /config");
|
Logs.info (fun m -> m "GET /config");
|
||||||
let jsont = Api.ExchangeVersionResponse.jsont in
|
Respond.ok req ExchangeVersionResponse.jsont
|
||||||
Respond.ok req jsont config
|
ExchangeVersionResponse.
|
||||||
|
{
|
||||||
|
version= Libtool_version.mte_protocol_version;
|
||||||
|
name= "taler-exchange";
|
||||||
|
currency= Config.currency;
|
||||||
|
currency_specification= Config.Currency.specification;
|
||||||
|
implementation= None;
|
||||||
|
shopping_url= None;
|
||||||
|
open_banking_gateway= None;
|
||||||
|
aml_spa_dialect= None;
|
||||||
|
}
|
||||||
|
|
||||||
(* not implemented:
|
|
||||||
- kyc
|
|
||||||
- wads
|
|
||||||
- account limits
|
|
||||||
- zero limited operations
|
|
||||||
- recoup
|
|
||||||
- extensions *)
|
|
||||||
let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
|
let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
|
||||||
let version = Libtool_version.mte_protocol_version in
|
let version = Libtool_version.mte_protocol_version in
|
||||||
let base_url = Config.base_url in
|
let base_url = Config.base_url in
|
||||||
|
|
@ -35,7 +38,7 @@ let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
|
||||||
let shopping_url = Config.shopping_url in
|
let shopping_url = Config.shopping_url in
|
||||||
let open_banking_gateway = Config.open_banking_gateway_url in
|
let open_banking_gateway = Config.open_banking_gateway_url in
|
||||||
let bank_compliance_language = Config.bank_compliance_language in
|
let bank_compliance_language = Config.bank_compliance_language in
|
||||||
let currency_specification = Api.currency_specification in
|
let currency_specification = Config.Currency.specification in
|
||||||
let tiny_amount = Config.tiny_amount in
|
let tiny_amount = Config.tiny_amount in
|
||||||
let stefan_abs = Config.stefan_abs in
|
let stefan_abs = Config.stefan_abs in
|
||||||
let stefan_log = Config.stefan_log in
|
let stefan_log = Config.stefan_log in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue