63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package model
|
|
|
|
import "strings"
|
|
|
|
var supportedRails = map[Rail]struct{}{
|
|
RailCrypto: {},
|
|
RailProviderSettlement: {},
|
|
RailLedger: {},
|
|
RailCardPayout: {},
|
|
RailFiatOnRamp: {},
|
|
RailFiatOffRamp: {},
|
|
}
|
|
|
|
// ParseRail canonicalizes string values into a Rail token.
|
|
func ParseRail(value string) Rail {
|
|
clean := strings.ToUpper(strings.TrimSpace(value))
|
|
if clean == "" {
|
|
return RailUnspecified
|
|
}
|
|
clean = strings.ReplaceAll(clean, "-", "_")
|
|
clean = strings.ReplaceAll(clean, " ", "_")
|
|
for strings.Contains(clean, "__") {
|
|
clean = strings.ReplaceAll(clean, "__", "_")
|
|
}
|
|
|
|
switch clean {
|
|
case string(RailCrypto), "RAIL_CRYPTO":
|
|
return RailCrypto
|
|
case string(RailProviderSettlement), "PROVIDER_SETTLEMENT", "RAIL_SETTLEMENT", "RAIL_PROVIDER_SETTLEMENT":
|
|
return RailProviderSettlement
|
|
case string(RailLedger), "RAIL_LEDGER":
|
|
return RailLedger
|
|
case string(RailCardPayout), "CARD_PAYOUT", "RAIL_CARD", "RAIL_CARD_PAYOUT":
|
|
return RailCardPayout
|
|
case string(RailFiatOnRamp), "FIAT_ONRAMP", "RAIL_ONRAMP", "RAIL_FIAT_ONRAMP":
|
|
return RailFiatOnRamp
|
|
case string(RailFiatOffRamp), "FIAT_OFFRAMP", "RAIL_OFFRAMP", "RAIL_FIAT_OFFRAMP":
|
|
return RailFiatOffRamp
|
|
default:
|
|
return RailUnspecified
|
|
}
|
|
}
|
|
|
|
// IsSupportedRail reports whether rail is recognized by payment planning.
|
|
func IsSupportedRail(rail Rail) bool {
|
|
_, ok := supportedRails[ParseRail(string(rail))]
|
|
return ok
|
|
}
|
|
|
|
func normalizeRail(value Rail) Rail {
|
|
parsed := ParseRail(string(value))
|
|
if parsed != RailUnspecified {
|
|
return parsed
|
|
}
|
|
|
|
clean := strings.ToUpper(strings.TrimSpace(string(value)))
|
|
if clean == "" {
|
|
return RailUnspecified
|
|
}
|
|
|
|
return Rail(clean)
|
|
}
|