/*
This file is part of GNU Taler
(C) 2022-2024 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see
*/
import { AmountJson, Amounts, TalerExchangeApi } from "@gnu-taler/taler-util";
import { StringConverter } from "@gnu-taler/web-util/browser";
export const amlStateConverter = {
toStringUI: stringifyAmlState,
fromStringUI: parseAmlState,
};
function stringifyAmlState(s: TalerExchangeApi.AmlState | undefined): string {
if (s === undefined) return "";
switch (s) {
case TalerExchangeApi.AmlState.normal:
return "normal";
case TalerExchangeApi.AmlState.pending:
return "pending";
case TalerExchangeApi.AmlState.frozen:
return "frozen";
}
}
function parseAmlState(s: string | undefined): TalerExchangeApi.AmlState {
switch (s) {
case "normal":
return TalerExchangeApi.AmlState.normal;
case "pending":
return TalerExchangeApi.AmlState.pending;
case "frozen":
return TalerExchangeApi.AmlState.frozen;
default:
throw Error(`unknown AML state: ${s}`);
}
}
const amountConverter: StringConverter = {
fromStringUI(v: string | undefined): AmountJson {
// FIXME: requires currency
return Amounts.parse(`NETZBON:${v}`) ?? Amounts.zeroOfCurrency("NETZBON");
},
toStringUI(v: unknown): string {
return v === undefined ? "" : Amounts.stringifyValue(v as AmountJson);
},
};
export function getConverterById(id: string | undefined): StringConverter {
if (id === "Taler.Amount") {
// @ts-expect-error check this
return amountConverter;
}
if (id === "TalerExchangeApi.AmlState") {
// @ts-expect-error check this
return amlStateConverter;
}
return undefined!;
}