import BreezSDKLiquid import Foundation enum BreezSDKLiquidMapper { static func asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: [String: Any?]) throws -> AesSuccessActionDataDecrypted { guard let description = aesSuccessActionDataDecrypted["description"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "AesSuccessActionDataDecrypted")) } guard let plaintext = aesSuccessActionDataDecrypted["plaintext"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "plaintext", typeName: "AesSuccessActionDataDecrypted")) } return AesSuccessActionDataDecrypted(description: description, plaintext: plaintext) } static func dictionaryOf(aesSuccessActionDataDecrypted: AesSuccessActionDataDecrypted) -> [String: Any?] { return [ "description": aesSuccessActionDataDecrypted.description, "plaintext": aesSuccessActionDataDecrypted.plaintext, ] } static func asAesSuccessActionDataDecryptedList(arr: [Any]) throws -> [AesSuccessActionDataDecrypted] { var list = [AesSuccessActionDataDecrypted]() for value in arr { if let val = value as? [String: Any?] { var aesSuccessActionDataDecrypted = try asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: val) list.append(aesSuccessActionDataDecrypted) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "AesSuccessActionDataDecrypted")) } } return list } static func arrayOf(aesSuccessActionDataDecryptedList: [AesSuccessActionDataDecrypted]) -> [Any] { return aesSuccessActionDataDecryptedList.map { v -> [String: Any?] in return dictionaryOf(aesSuccessActionDataDecrypted: v) } } static func asBackupRequest(backupRequest: [String: Any?]) throws -> BackupRequest { var backupPath: String? if hasNonNilKey(data: backupRequest, key: "backupPath") { guard let backupPathTmp = backupRequest["backupPath"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "backupPath")) } backupPath = backupPathTmp } return BackupRequest(backupPath: backupPath) } static func dictionaryOf(backupRequest: BackupRequest) -> [String: Any?] { return [ "backupPath": backupRequest.backupPath == nil ? nil : backupRequest.backupPath, ] } static func asBackupRequestList(arr: [Any]) throws -> [BackupRequest] { var list = [BackupRequest]() for value in arr { if let val = value as? [String: Any?] { var backupRequest = try asBackupRequest(backupRequest: val) list.append(backupRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "BackupRequest")) } } return list } static func arrayOf(backupRequestList: [BackupRequest]) -> [Any] { return backupRequestList.map { v -> [String: Any?] in return dictionaryOf(backupRequest: v) } } static func asBitcoinAddressData(bitcoinAddressData: [String: Any?]) throws -> BitcoinAddressData { guard let address = bitcoinAddressData["address"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "BitcoinAddressData")) } guard let networkTmp = bitcoinAddressData["network"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "BitcoinAddressData")) } let network = try asNetwork(network: networkTmp) var amountSat: UInt64? if hasNonNilKey(data: bitcoinAddressData, key: "amountSat") { guard let amountSatTmp = bitcoinAddressData["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "amountSat")) } amountSat = amountSatTmp } var label: String? if hasNonNilKey(data: bitcoinAddressData, key: "label") { guard let labelTmp = bitcoinAddressData["label"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "label")) } label = labelTmp } var message: String? if hasNonNilKey(data: bitcoinAddressData, key: "message") { guard let messageTmp = bitcoinAddressData["message"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "message")) } message = messageTmp } return BitcoinAddressData(address: address, network: network, amountSat: amountSat, label: label, message: message) } static func dictionaryOf(bitcoinAddressData: BitcoinAddressData) -> [String: Any?] { return [ "address": bitcoinAddressData.address, "network": valueOf(network: bitcoinAddressData.network), "amountSat": bitcoinAddressData.amountSat == nil ? nil : bitcoinAddressData.amountSat, "label": bitcoinAddressData.label == nil ? nil : bitcoinAddressData.label, "message": bitcoinAddressData.message == nil ? nil : bitcoinAddressData.message, ] } static func asBitcoinAddressDataList(arr: [Any]) throws -> [BitcoinAddressData] { var list = [BitcoinAddressData]() for value in arr { if let val = value as? [String: Any?] { var bitcoinAddressData = try asBitcoinAddressData(bitcoinAddressData: val) list.append(bitcoinAddressData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "BitcoinAddressData")) } } return list } static func arrayOf(bitcoinAddressDataList: [BitcoinAddressData]) -> [Any] { return bitcoinAddressDataList.map { v -> [String: Any?] in return dictionaryOf(bitcoinAddressData: v) } } static func asBuyBitcoinRequest(buyBitcoinRequest: [String: Any?]) throws -> BuyBitcoinRequest { guard let prepareResponseTmp = buyBitcoinRequest["prepareResponse"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "prepareResponse", typeName: "BuyBitcoinRequest")) } let prepareResponse = try asPrepareBuyBitcoinResponse(prepareBuyBitcoinResponse: prepareResponseTmp) var redirectUrl: String? if hasNonNilKey(data: buyBitcoinRequest, key: "redirectUrl") { guard let redirectUrlTmp = buyBitcoinRequest["redirectUrl"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "redirectUrl")) } redirectUrl = redirectUrlTmp } return BuyBitcoinRequest(prepareResponse: prepareResponse, redirectUrl: redirectUrl) } static func dictionaryOf(buyBitcoinRequest: BuyBitcoinRequest) -> [String: Any?] { return [ "prepareResponse": dictionaryOf(prepareBuyBitcoinResponse: buyBitcoinRequest.prepareResponse), "redirectUrl": buyBitcoinRequest.redirectUrl == nil ? nil : buyBitcoinRequest.redirectUrl, ] } static func asBuyBitcoinRequestList(arr: [Any]) throws -> [BuyBitcoinRequest] { var list = [BuyBitcoinRequest]() for value in arr { if let val = value as? [String: Any?] { var buyBitcoinRequest = try asBuyBitcoinRequest(buyBitcoinRequest: val) list.append(buyBitcoinRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "BuyBitcoinRequest")) } } return list } static func arrayOf(buyBitcoinRequestList: [BuyBitcoinRequest]) -> [Any] { return buyBitcoinRequestList.map { v -> [String: Any?] in return dictionaryOf(buyBitcoinRequest: v) } } static func asConfig(config: [String: Any?]) throws -> Config { guard let liquidElectrumUrl = config["liquidElectrumUrl"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "liquidElectrumUrl", typeName: "Config")) } guard let bitcoinElectrumUrl = config["bitcoinElectrumUrl"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "bitcoinElectrumUrl", typeName: "Config")) } guard let mempoolspaceUrl = config["mempoolspaceUrl"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "mempoolspaceUrl", typeName: "Config")) } guard let workingDir = config["workingDir"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "workingDir", typeName: "Config")) } guard let networkTmp = config["network"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "Config")) } let network = try asLiquidNetwork(liquidNetwork: networkTmp) guard let paymentTimeoutSec = config["paymentTimeoutSec"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentTimeoutSec", typeName: "Config")) } guard let zeroConfMinFeeRateMsat = config["zeroConfMinFeeRateMsat"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "zeroConfMinFeeRateMsat", typeName: "Config")) } var zeroConfMaxAmountSat: UInt64? if hasNonNilKey(data: config, key: "zeroConfMaxAmountSat") { guard let zeroConfMaxAmountSatTmp = config["zeroConfMaxAmountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "zeroConfMaxAmountSat")) } zeroConfMaxAmountSat = zeroConfMaxAmountSatTmp } return Config(liquidElectrumUrl: liquidElectrumUrl, bitcoinElectrumUrl: bitcoinElectrumUrl, mempoolspaceUrl: mempoolspaceUrl, workingDir: workingDir, network: network, paymentTimeoutSec: paymentTimeoutSec, zeroConfMinFeeRateMsat: zeroConfMinFeeRateMsat, zeroConfMaxAmountSat: zeroConfMaxAmountSat) } static func dictionaryOf(config: Config) -> [String: Any?] { return [ "liquidElectrumUrl": config.liquidElectrumUrl, "bitcoinElectrumUrl": config.bitcoinElectrumUrl, "mempoolspaceUrl": config.mempoolspaceUrl, "workingDir": config.workingDir, "network": valueOf(liquidNetwork: config.network), "paymentTimeoutSec": config.paymentTimeoutSec, "zeroConfMinFeeRateMsat": config.zeroConfMinFeeRateMsat, "zeroConfMaxAmountSat": config.zeroConfMaxAmountSat == nil ? nil : config.zeroConfMaxAmountSat, ] } static func asConfigList(arr: [Any]) throws -> [Config] { var list = [Config]() for value in arr { if let val = value as? [String: Any?] { var config = try asConfig(config: val) list.append(config) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Config")) } } return list } static func arrayOf(configList: [Config]) -> [Any] { return configList.map { v -> [String: Any?] in return dictionaryOf(config: v) } } static func asConnectRequest(connectRequest: [String: Any?]) throws -> ConnectRequest { guard let configTmp = connectRequest["config"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "config", typeName: "ConnectRequest")) } let config = try asConfig(config: configTmp) guard let mnemonic = connectRequest["mnemonic"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "mnemonic", typeName: "ConnectRequest")) } return ConnectRequest(config: config, mnemonic: mnemonic) } static func dictionaryOf(connectRequest: ConnectRequest) -> [String: Any?] { return [ "config": dictionaryOf(config: connectRequest.config), "mnemonic": connectRequest.mnemonic, ] } static func asConnectRequestList(arr: [Any]) throws -> [ConnectRequest] { var list = [ConnectRequest]() for value in arr { if let val = value as? [String: Any?] { var connectRequest = try asConnectRequest(connectRequest: val) list.append(connectRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "ConnectRequest")) } } return list } static func arrayOf(connectRequestList: [ConnectRequest]) -> [Any] { return connectRequestList.map { v -> [String: Any?] in return dictionaryOf(connectRequest: v) } } static func asCurrencyInfo(currencyInfo: [String: Any?]) throws -> CurrencyInfo { guard let name = currencyInfo["name"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "name", typeName: "CurrencyInfo")) } guard let fractionSize = currencyInfo["fractionSize"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "fractionSize", typeName: "CurrencyInfo")) } var spacing: UInt32? if hasNonNilKey(data: currencyInfo, key: "spacing") { guard let spacingTmp = currencyInfo["spacing"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "spacing")) } spacing = spacingTmp } var symbol: Symbol? if let symbolTmp = currencyInfo["symbol"] as? [String: Any?] { symbol = try asSymbol(symbol: symbolTmp) } var uniqSymbol: Symbol? if let uniqSymbolTmp = currencyInfo["uniqSymbol"] as? [String: Any?] { uniqSymbol = try asSymbol(symbol: uniqSymbolTmp) } guard let localizedNameTmp = currencyInfo["localizedName"] as? [[String: Any?]] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "localizedName", typeName: "CurrencyInfo")) } let localizedName = try asLocalizedNameList(arr: localizedNameTmp) guard let localeOverridesTmp = currencyInfo["localeOverrides"] as? [[String: Any?]] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "localeOverrides", typeName: "CurrencyInfo")) } let localeOverrides = try asLocaleOverridesList(arr: localeOverridesTmp) return CurrencyInfo(name: name, fractionSize: fractionSize, spacing: spacing, symbol: symbol, uniqSymbol: uniqSymbol, localizedName: localizedName, localeOverrides: localeOverrides) } static func dictionaryOf(currencyInfo: CurrencyInfo) -> [String: Any?] { return [ "name": currencyInfo.name, "fractionSize": currencyInfo.fractionSize, "spacing": currencyInfo.spacing == nil ? nil : currencyInfo.spacing, "symbol": currencyInfo.symbol == nil ? nil : dictionaryOf(symbol: currencyInfo.symbol!), "uniqSymbol": currencyInfo.uniqSymbol == nil ? nil : dictionaryOf(symbol: currencyInfo.uniqSymbol!), "localizedName": arrayOf(localizedNameList: currencyInfo.localizedName), "localeOverrides": arrayOf(localeOverridesList: currencyInfo.localeOverrides), ] } static func asCurrencyInfoList(arr: [Any]) throws -> [CurrencyInfo] { var list = [CurrencyInfo]() for value in arr { if let val = value as? [String: Any?] { var currencyInfo = try asCurrencyInfo(currencyInfo: val) list.append(currencyInfo) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "CurrencyInfo")) } } return list } static func arrayOf(currencyInfoList: [CurrencyInfo]) -> [Any] { return currencyInfoList.map { v -> [String: Any?] in return dictionaryOf(currencyInfo: v) } } static func asFiatCurrency(fiatCurrency: [String: Any?]) throws -> FiatCurrency { guard let id = fiatCurrency["id"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "id", typeName: "FiatCurrency")) } guard let infoTmp = fiatCurrency["info"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "info", typeName: "FiatCurrency")) } let info = try asCurrencyInfo(currencyInfo: infoTmp) return FiatCurrency(id: id, info: info) } static func dictionaryOf(fiatCurrency: FiatCurrency) -> [String: Any?] { return [ "id": fiatCurrency.id, "info": dictionaryOf(currencyInfo: fiatCurrency.info), ] } static func asFiatCurrencyList(arr: [Any]) throws -> [FiatCurrency] { var list = [FiatCurrency]() for value in arr { if let val = value as? [String: Any?] { var fiatCurrency = try asFiatCurrency(fiatCurrency: val) list.append(fiatCurrency) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "FiatCurrency")) } } return list } static func arrayOf(fiatCurrencyList: [FiatCurrency]) -> [Any] { return fiatCurrencyList.map { v -> [String: Any?] in return dictionaryOf(fiatCurrency: v) } } static func asGetInfoResponse(getInfoResponse: [String: Any?]) throws -> GetInfoResponse { guard let balanceSat = getInfoResponse["balanceSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "balanceSat", typeName: "GetInfoResponse")) } guard let pendingSendSat = getInfoResponse["pendingSendSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "pendingSendSat", typeName: "GetInfoResponse")) } guard let pendingReceiveSat = getInfoResponse["pendingReceiveSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "pendingReceiveSat", typeName: "GetInfoResponse")) } guard let pubkey = getInfoResponse["pubkey"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "pubkey", typeName: "GetInfoResponse")) } return GetInfoResponse(balanceSat: balanceSat, pendingSendSat: pendingSendSat, pendingReceiveSat: pendingReceiveSat, pubkey: pubkey) } static func dictionaryOf(getInfoResponse: GetInfoResponse) -> [String: Any?] { return [ "balanceSat": getInfoResponse.balanceSat, "pendingSendSat": getInfoResponse.pendingSendSat, "pendingReceiveSat": getInfoResponse.pendingReceiveSat, "pubkey": getInfoResponse.pubkey, ] } static func asGetInfoResponseList(arr: [Any]) throws -> [GetInfoResponse] { var list = [GetInfoResponse]() for value in arr { if let val = value as? [String: Any?] { var getInfoResponse = try asGetInfoResponse(getInfoResponse: val) list.append(getInfoResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "GetInfoResponse")) } } return list } static func arrayOf(getInfoResponseList: [GetInfoResponse]) -> [Any] { return getInfoResponseList.map { v -> [String: Any?] in return dictionaryOf(getInfoResponse: v) } } static func asLnInvoice(lnInvoice: [String: Any?]) throws -> LnInvoice { guard let bolt11 = lnInvoice["bolt11"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "bolt11", typeName: "LnInvoice")) } guard let networkTmp = lnInvoice["network"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "LnInvoice")) } let network = try asNetwork(network: networkTmp) guard let payeePubkey = lnInvoice["payeePubkey"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "payeePubkey", typeName: "LnInvoice")) } guard let paymentHash = lnInvoice["paymentHash"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentHash", typeName: "LnInvoice")) } var description: String? if hasNonNilKey(data: lnInvoice, key: "description") { guard let descriptionTmp = lnInvoice["description"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "description")) } description = descriptionTmp } var descriptionHash: String? if hasNonNilKey(data: lnInvoice, key: "descriptionHash") { guard let descriptionHashTmp = lnInvoice["descriptionHash"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "descriptionHash")) } descriptionHash = descriptionHashTmp } var amountMsat: UInt64? if hasNonNilKey(data: lnInvoice, key: "amountMsat") { guard let amountMsatTmp = lnInvoice["amountMsat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "amountMsat")) } amountMsat = amountMsatTmp } guard let timestamp = lnInvoice["timestamp"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "timestamp", typeName: "LnInvoice")) } guard let expiry = lnInvoice["expiry"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "expiry", typeName: "LnInvoice")) } guard let routingHintsTmp = lnInvoice["routingHints"] as? [[String: Any?]] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "routingHints", typeName: "LnInvoice")) } let routingHints = try asRouteHintList(arr: routingHintsTmp) guard let paymentSecret = lnInvoice["paymentSecret"] as? [UInt8] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentSecret", typeName: "LnInvoice")) } guard let minFinalCltvExpiryDelta = lnInvoice["minFinalCltvExpiryDelta"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "minFinalCltvExpiryDelta", typeName: "LnInvoice")) } return LnInvoice(bolt11: bolt11, network: network, payeePubkey: payeePubkey, paymentHash: paymentHash, description: description, descriptionHash: descriptionHash, amountMsat: amountMsat, timestamp: timestamp, expiry: expiry, routingHints: routingHints, paymentSecret: paymentSecret, minFinalCltvExpiryDelta: minFinalCltvExpiryDelta) } static func dictionaryOf(lnInvoice: LnInvoice) -> [String: Any?] { return [ "bolt11": lnInvoice.bolt11, "network": valueOf(network: lnInvoice.network), "payeePubkey": lnInvoice.payeePubkey, "paymentHash": lnInvoice.paymentHash, "description": lnInvoice.description == nil ? nil : lnInvoice.description, "descriptionHash": lnInvoice.descriptionHash == nil ? nil : lnInvoice.descriptionHash, "amountMsat": lnInvoice.amountMsat == nil ? nil : lnInvoice.amountMsat, "timestamp": lnInvoice.timestamp, "expiry": lnInvoice.expiry, "routingHints": arrayOf(routeHintList: lnInvoice.routingHints), "paymentSecret": lnInvoice.paymentSecret, "minFinalCltvExpiryDelta": lnInvoice.minFinalCltvExpiryDelta, ] } static func asLnInvoiceList(arr: [Any]) throws -> [LnInvoice] { var list = [LnInvoice]() for value in arr { if let val = value as? [String: Any?] { var lnInvoice = try asLnInvoice(lnInvoice: val) list.append(lnInvoice) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnInvoice")) } } return list } static func arrayOf(lnInvoiceList: [LnInvoice]) -> [Any] { return lnInvoiceList.map { v -> [String: Any?] in return dictionaryOf(lnInvoice: v) } } static func asLightningPaymentLimitsResponse(lightningPaymentLimitsResponse: [String: Any?]) throws -> LightningPaymentLimitsResponse { guard let sendTmp = lightningPaymentLimitsResponse["send"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "send", typeName: "LightningPaymentLimitsResponse")) } let send = try asLimits(limits: sendTmp) guard let receiveTmp = lightningPaymentLimitsResponse["receive"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "receive", typeName: "LightningPaymentLimitsResponse")) } let receive = try asLimits(limits: receiveTmp) return LightningPaymentLimitsResponse(send: send, receive: receive) } static func dictionaryOf(lightningPaymentLimitsResponse: LightningPaymentLimitsResponse) -> [String: Any?] { return [ "send": dictionaryOf(limits: lightningPaymentLimitsResponse.send), "receive": dictionaryOf(limits: lightningPaymentLimitsResponse.receive), ] } static func asLightningPaymentLimitsResponseList(arr: [Any]) throws -> [LightningPaymentLimitsResponse] { var list = [LightningPaymentLimitsResponse]() for value in arr { if let val = value as? [String: Any?] { var lightningPaymentLimitsResponse = try asLightningPaymentLimitsResponse(lightningPaymentLimitsResponse: val) list.append(lightningPaymentLimitsResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LightningPaymentLimitsResponse")) } } return list } static func arrayOf(lightningPaymentLimitsResponseList: [LightningPaymentLimitsResponse]) -> [Any] { return lightningPaymentLimitsResponseList.map { v -> [String: Any?] in return dictionaryOf(lightningPaymentLimitsResponse: v) } } static func asLimits(limits: [String: Any?]) throws -> Limits { guard let minSat = limits["minSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "minSat", typeName: "Limits")) } guard let maxSat = limits["maxSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "maxSat", typeName: "Limits")) } guard let maxZeroConfSat = limits["maxZeroConfSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "maxZeroConfSat", typeName: "Limits")) } return Limits(minSat: minSat, maxSat: maxSat, maxZeroConfSat: maxZeroConfSat) } static func dictionaryOf(limits: Limits) -> [String: Any?] { return [ "minSat": limits.minSat, "maxSat": limits.maxSat, "maxZeroConfSat": limits.maxZeroConfSat, ] } static func asLimitsList(arr: [Any]) throws -> [Limits] { var list = [Limits]() for value in arr { if let val = value as? [String: Any?] { var limits = try asLimits(limits: val) list.append(limits) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Limits")) } } return list } static func arrayOf(limitsList: [Limits]) -> [Any] { return limitsList.map { v -> [String: Any?] in return dictionaryOf(limits: v) } } static func asLiquidAddressData(liquidAddressData: [String: Any?]) throws -> LiquidAddressData { guard let address = liquidAddressData["address"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "LiquidAddressData")) } guard let networkTmp = liquidAddressData["network"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "network", typeName: "LiquidAddressData")) } let network = try asNetwork(network: networkTmp) var assetId: String? if hasNonNilKey(data: liquidAddressData, key: "assetId") { guard let assetIdTmp = liquidAddressData["assetId"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "assetId")) } assetId = assetIdTmp } var amountSat: UInt64? if hasNonNilKey(data: liquidAddressData, key: "amountSat") { guard let amountSatTmp = liquidAddressData["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "amountSat")) } amountSat = amountSatTmp } var label: String? if hasNonNilKey(data: liquidAddressData, key: "label") { guard let labelTmp = liquidAddressData["label"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "label")) } label = labelTmp } var message: String? if hasNonNilKey(data: liquidAddressData, key: "message") { guard let messageTmp = liquidAddressData["message"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "message")) } message = messageTmp } return LiquidAddressData(address: address, network: network, assetId: assetId, amountSat: amountSat, label: label, message: message) } static func dictionaryOf(liquidAddressData: LiquidAddressData) -> [String: Any?] { return [ "address": liquidAddressData.address, "network": valueOf(network: liquidAddressData.network), "assetId": liquidAddressData.assetId == nil ? nil : liquidAddressData.assetId, "amountSat": liquidAddressData.amountSat == nil ? nil : liquidAddressData.amountSat, "label": liquidAddressData.label == nil ? nil : liquidAddressData.label, "message": liquidAddressData.message == nil ? nil : liquidAddressData.message, ] } static func asLiquidAddressDataList(arr: [Any]) throws -> [LiquidAddressData] { var list = [LiquidAddressData]() for value in arr { if let val = value as? [String: Any?] { var liquidAddressData = try asLiquidAddressData(liquidAddressData: val) list.append(liquidAddressData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LiquidAddressData")) } } return list } static func arrayOf(liquidAddressDataList: [LiquidAddressData]) -> [Any] { return liquidAddressDataList.map { v -> [String: Any?] in return dictionaryOf(liquidAddressData: v) } } static func asListPaymentsRequest(listPaymentsRequest: [String: Any?]) throws -> ListPaymentsRequest { var filters: [PaymentType]? if let filtersTmp = listPaymentsRequest["filters"] as? [String] { filters = try asPaymentTypeList(arr: filtersTmp) } var fromTimestamp: Int64? if hasNonNilKey(data: listPaymentsRequest, key: "fromTimestamp") { guard let fromTimestampTmp = listPaymentsRequest["fromTimestamp"] as? Int64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "fromTimestamp")) } fromTimestamp = fromTimestampTmp } var toTimestamp: Int64? if hasNonNilKey(data: listPaymentsRequest, key: "toTimestamp") { guard let toTimestampTmp = listPaymentsRequest["toTimestamp"] as? Int64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "toTimestamp")) } toTimestamp = toTimestampTmp } var offset: UInt32? if hasNonNilKey(data: listPaymentsRequest, key: "offset") { guard let offsetTmp = listPaymentsRequest["offset"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "offset")) } offset = offsetTmp } var limit: UInt32? if hasNonNilKey(data: listPaymentsRequest, key: "limit") { guard let limitTmp = listPaymentsRequest["limit"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "limit")) } limit = limitTmp } return ListPaymentsRequest(filters: filters, fromTimestamp: fromTimestamp, toTimestamp: toTimestamp, offset: offset, limit: limit) } static func dictionaryOf(listPaymentsRequest: ListPaymentsRequest) -> [String: Any?] { return [ "filters": listPaymentsRequest.filters == nil ? nil : arrayOf(paymentTypeList: listPaymentsRequest.filters!), "fromTimestamp": listPaymentsRequest.fromTimestamp == nil ? nil : listPaymentsRequest.fromTimestamp, "toTimestamp": listPaymentsRequest.toTimestamp == nil ? nil : listPaymentsRequest.toTimestamp, "offset": listPaymentsRequest.offset == nil ? nil : listPaymentsRequest.offset, "limit": listPaymentsRequest.limit == nil ? nil : listPaymentsRequest.limit, ] } static func asListPaymentsRequestList(arr: [Any]) throws -> [ListPaymentsRequest] { var list = [ListPaymentsRequest]() for value in arr { if let val = value as? [String: Any?] { var listPaymentsRequest = try asListPaymentsRequest(listPaymentsRequest: val) list.append(listPaymentsRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "ListPaymentsRequest")) } } return list } static func arrayOf(listPaymentsRequestList: [ListPaymentsRequest]) -> [Any] { return listPaymentsRequestList.map { v -> [String: Any?] in return dictionaryOf(listPaymentsRequest: v) } } static func asLnUrlAuthRequestData(lnUrlAuthRequestData: [String: Any?]) throws -> LnUrlAuthRequestData { guard let k1 = lnUrlAuthRequestData["k1"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "k1", typeName: "LnUrlAuthRequestData")) } guard let domain = lnUrlAuthRequestData["domain"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "domain", typeName: "LnUrlAuthRequestData")) } guard let url = lnUrlAuthRequestData["url"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "LnUrlAuthRequestData")) } var action: String? if hasNonNilKey(data: lnUrlAuthRequestData, key: "action") { guard let actionTmp = lnUrlAuthRequestData["action"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "action")) } action = actionTmp } return LnUrlAuthRequestData(k1: k1, domain: domain, url: url, action: action) } static func dictionaryOf(lnUrlAuthRequestData: LnUrlAuthRequestData) -> [String: Any?] { return [ "k1": lnUrlAuthRequestData.k1, "domain": lnUrlAuthRequestData.domain, "url": lnUrlAuthRequestData.url, "action": lnUrlAuthRequestData.action == nil ? nil : lnUrlAuthRequestData.action, ] } static func asLnUrlAuthRequestDataList(arr: [Any]) throws -> [LnUrlAuthRequestData] { var list = [LnUrlAuthRequestData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlAuthRequestData = try asLnUrlAuthRequestData(lnUrlAuthRequestData: val) list.append(lnUrlAuthRequestData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlAuthRequestData")) } } return list } static func arrayOf(lnUrlAuthRequestDataList: [LnUrlAuthRequestData]) -> [Any] { return lnUrlAuthRequestDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlAuthRequestData: v) } } static func asLnUrlErrorData(lnUrlErrorData: [String: Any?]) throws -> LnUrlErrorData { guard let reason = lnUrlErrorData["reason"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "LnUrlErrorData")) } return LnUrlErrorData(reason: reason) } static func dictionaryOf(lnUrlErrorData: LnUrlErrorData) -> [String: Any?] { return [ "reason": lnUrlErrorData.reason, ] } static func asLnUrlErrorDataList(arr: [Any]) throws -> [LnUrlErrorData] { var list = [LnUrlErrorData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlErrorData = try asLnUrlErrorData(lnUrlErrorData: val) list.append(lnUrlErrorData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlErrorData")) } } return list } static func arrayOf(lnUrlErrorDataList: [LnUrlErrorData]) -> [Any] { return lnUrlErrorDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlErrorData: v) } } static func asLnUrlPayErrorData(lnUrlPayErrorData: [String: Any?]) throws -> LnUrlPayErrorData { guard let paymentHash = lnUrlPayErrorData["paymentHash"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentHash", typeName: "LnUrlPayErrorData")) } guard let reason = lnUrlPayErrorData["reason"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "LnUrlPayErrorData")) } return LnUrlPayErrorData(paymentHash: paymentHash, reason: reason) } static func dictionaryOf(lnUrlPayErrorData: LnUrlPayErrorData) -> [String: Any?] { return [ "paymentHash": lnUrlPayErrorData.paymentHash, "reason": lnUrlPayErrorData.reason, ] } static func asLnUrlPayErrorDataList(arr: [Any]) throws -> [LnUrlPayErrorData] { var list = [LnUrlPayErrorData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlPayErrorData = try asLnUrlPayErrorData(lnUrlPayErrorData: val) list.append(lnUrlPayErrorData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayErrorData")) } } return list } static func arrayOf(lnUrlPayErrorDataList: [LnUrlPayErrorData]) -> [Any] { return lnUrlPayErrorDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlPayErrorData: v) } } static func asLnUrlPayRequest(lnUrlPayRequest: [String: Any?]) throws -> LnUrlPayRequest { guard let dataTmp = lnUrlPayRequest["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayRequest")) } let data = try asLnUrlPayRequestData(lnUrlPayRequestData: dataTmp) guard let amountMsat = lnUrlPayRequest["amountMsat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountMsat", typeName: "LnUrlPayRequest")) } var comment: String? if hasNonNilKey(data: lnUrlPayRequest, key: "comment") { guard let commentTmp = lnUrlPayRequest["comment"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "comment")) } comment = commentTmp } var paymentLabel: String? if hasNonNilKey(data: lnUrlPayRequest, key: "paymentLabel") { guard let paymentLabelTmp = lnUrlPayRequest["paymentLabel"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "paymentLabel")) } paymentLabel = paymentLabelTmp } var validateSuccessActionUrl: Bool? if hasNonNilKey(data: lnUrlPayRequest, key: "validateSuccessActionUrl") { guard let validateSuccessActionUrlTmp = lnUrlPayRequest["validateSuccessActionUrl"] as? Bool else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "validateSuccessActionUrl")) } validateSuccessActionUrl = validateSuccessActionUrlTmp } return LnUrlPayRequest(data: data, amountMsat: amountMsat, comment: comment, paymentLabel: paymentLabel, validateSuccessActionUrl: validateSuccessActionUrl) } static func dictionaryOf(lnUrlPayRequest: LnUrlPayRequest) -> [String: Any?] { return [ "data": dictionaryOf(lnUrlPayRequestData: lnUrlPayRequest.data), "amountMsat": lnUrlPayRequest.amountMsat, "comment": lnUrlPayRequest.comment == nil ? nil : lnUrlPayRequest.comment, "paymentLabel": lnUrlPayRequest.paymentLabel == nil ? nil : lnUrlPayRequest.paymentLabel, "validateSuccessActionUrl": lnUrlPayRequest.validateSuccessActionUrl == nil ? nil : lnUrlPayRequest.validateSuccessActionUrl, ] } static func asLnUrlPayRequestList(arr: [Any]) throws -> [LnUrlPayRequest] { var list = [LnUrlPayRequest]() for value in arr { if let val = value as? [String: Any?] { var lnUrlPayRequest = try asLnUrlPayRequest(lnUrlPayRequest: val) list.append(lnUrlPayRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayRequest")) } } return list } static func arrayOf(lnUrlPayRequestList: [LnUrlPayRequest]) -> [Any] { return lnUrlPayRequestList.map { v -> [String: Any?] in return dictionaryOf(lnUrlPayRequest: v) } } static func asLnUrlPayRequestData(lnUrlPayRequestData: [String: Any?]) throws -> LnUrlPayRequestData { guard let callback = lnUrlPayRequestData["callback"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "callback", typeName: "LnUrlPayRequestData")) } guard let minSendable = lnUrlPayRequestData["minSendable"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "minSendable", typeName: "LnUrlPayRequestData")) } guard let maxSendable = lnUrlPayRequestData["maxSendable"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "maxSendable", typeName: "LnUrlPayRequestData")) } guard let metadataStr = lnUrlPayRequestData["metadataStr"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "metadataStr", typeName: "LnUrlPayRequestData")) } guard let commentAllowed = lnUrlPayRequestData["commentAllowed"] as? UInt16 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "commentAllowed", typeName: "LnUrlPayRequestData")) } guard let domain = lnUrlPayRequestData["domain"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "domain", typeName: "LnUrlPayRequestData")) } guard let allowsNostr = lnUrlPayRequestData["allowsNostr"] as? Bool else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "allowsNostr", typeName: "LnUrlPayRequestData")) } var nostrPubkey: String? if hasNonNilKey(data: lnUrlPayRequestData, key: "nostrPubkey") { guard let nostrPubkeyTmp = lnUrlPayRequestData["nostrPubkey"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "nostrPubkey")) } nostrPubkey = nostrPubkeyTmp } var lnAddress: String? if hasNonNilKey(data: lnUrlPayRequestData, key: "lnAddress") { guard let lnAddressTmp = lnUrlPayRequestData["lnAddress"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "lnAddress")) } lnAddress = lnAddressTmp } return LnUrlPayRequestData(callback: callback, minSendable: minSendable, maxSendable: maxSendable, metadataStr: metadataStr, commentAllowed: commentAllowed, domain: domain, allowsNostr: allowsNostr, nostrPubkey: nostrPubkey, lnAddress: lnAddress) } static func dictionaryOf(lnUrlPayRequestData: LnUrlPayRequestData) -> [String: Any?] { return [ "callback": lnUrlPayRequestData.callback, "minSendable": lnUrlPayRequestData.minSendable, "maxSendable": lnUrlPayRequestData.maxSendable, "metadataStr": lnUrlPayRequestData.metadataStr, "commentAllowed": lnUrlPayRequestData.commentAllowed, "domain": lnUrlPayRequestData.domain, "allowsNostr": lnUrlPayRequestData.allowsNostr, "nostrPubkey": lnUrlPayRequestData.nostrPubkey == nil ? nil : lnUrlPayRequestData.nostrPubkey, "lnAddress": lnUrlPayRequestData.lnAddress == nil ? nil : lnUrlPayRequestData.lnAddress, ] } static func asLnUrlPayRequestDataList(arr: [Any]) throws -> [LnUrlPayRequestData] { var list = [LnUrlPayRequestData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlPayRequestData = try asLnUrlPayRequestData(lnUrlPayRequestData: val) list.append(lnUrlPayRequestData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayRequestData")) } } return list } static func arrayOf(lnUrlPayRequestDataList: [LnUrlPayRequestData]) -> [Any] { return lnUrlPayRequestDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlPayRequestData: v) } } static func asLnUrlPaySuccessData(lnUrlPaySuccessData: [String: Any?]) throws -> LnUrlPaySuccessData { var successAction: SuccessActionProcessed? if let successActionTmp = lnUrlPaySuccessData["successAction"] as? [String: Any?] { successAction = try asSuccessActionProcessed(successActionProcessed: successActionTmp) } guard let paymentTmp = lnUrlPaySuccessData["payment"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "payment", typeName: "LnUrlPaySuccessData")) } let payment = try asPayment(payment: paymentTmp) return LnUrlPaySuccessData(successAction: successAction, payment: payment) } static func dictionaryOf(lnUrlPaySuccessData: LnUrlPaySuccessData) -> [String: Any?] { return [ "successAction": lnUrlPaySuccessData.successAction == nil ? nil : dictionaryOf(successActionProcessed: lnUrlPaySuccessData.successAction!), "payment": dictionaryOf(payment: lnUrlPaySuccessData.payment), ] } static func asLnUrlPaySuccessDataList(arr: [Any]) throws -> [LnUrlPaySuccessData] { var list = [LnUrlPaySuccessData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlPaySuccessData = try asLnUrlPaySuccessData(lnUrlPaySuccessData: val) list.append(lnUrlPaySuccessData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPaySuccessData")) } } return list } static func arrayOf(lnUrlPaySuccessDataList: [LnUrlPaySuccessData]) -> [Any] { return lnUrlPaySuccessDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlPaySuccessData: v) } } static func asLnUrlWithdrawRequest(lnUrlWithdrawRequest: [String: Any?]) throws -> LnUrlWithdrawRequest { guard let dataTmp = lnUrlWithdrawRequest["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawRequest")) } let data = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: dataTmp) guard let amountMsat = lnUrlWithdrawRequest["amountMsat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountMsat", typeName: "LnUrlWithdrawRequest")) } var description: String? if hasNonNilKey(data: lnUrlWithdrawRequest, key: "description") { guard let descriptionTmp = lnUrlWithdrawRequest["description"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "description")) } description = descriptionTmp } return LnUrlWithdrawRequest(data: data, amountMsat: amountMsat, description: description) } static func dictionaryOf(lnUrlWithdrawRequest: LnUrlWithdrawRequest) -> [String: Any?] { return [ "data": dictionaryOf(lnUrlWithdrawRequestData: lnUrlWithdrawRequest.data), "amountMsat": lnUrlWithdrawRequest.amountMsat, "description": lnUrlWithdrawRequest.description == nil ? nil : lnUrlWithdrawRequest.description, ] } static func asLnUrlWithdrawRequestList(arr: [Any]) throws -> [LnUrlWithdrawRequest] { var list = [LnUrlWithdrawRequest]() for value in arr { if let val = value as? [String: Any?] { var lnUrlWithdrawRequest = try asLnUrlWithdrawRequest(lnUrlWithdrawRequest: val) list.append(lnUrlWithdrawRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawRequest")) } } return list } static func arrayOf(lnUrlWithdrawRequestList: [LnUrlWithdrawRequest]) -> [Any] { return lnUrlWithdrawRequestList.map { v -> [String: Any?] in return dictionaryOf(lnUrlWithdrawRequest: v) } } static func asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: [String: Any?]) throws -> LnUrlWithdrawRequestData { guard let callback = lnUrlWithdrawRequestData["callback"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "callback", typeName: "LnUrlWithdrawRequestData")) } guard let k1 = lnUrlWithdrawRequestData["k1"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "k1", typeName: "LnUrlWithdrawRequestData")) } guard let defaultDescription = lnUrlWithdrawRequestData["defaultDescription"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "defaultDescription", typeName: "LnUrlWithdrawRequestData")) } guard let minWithdrawable = lnUrlWithdrawRequestData["minWithdrawable"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "minWithdrawable", typeName: "LnUrlWithdrawRequestData")) } guard let maxWithdrawable = lnUrlWithdrawRequestData["maxWithdrawable"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "maxWithdrawable", typeName: "LnUrlWithdrawRequestData")) } return LnUrlWithdrawRequestData(callback: callback, k1: k1, defaultDescription: defaultDescription, minWithdrawable: minWithdrawable, maxWithdrawable: maxWithdrawable) } static func dictionaryOf(lnUrlWithdrawRequestData: LnUrlWithdrawRequestData) -> [String: Any?] { return [ "callback": lnUrlWithdrawRequestData.callback, "k1": lnUrlWithdrawRequestData.k1, "defaultDescription": lnUrlWithdrawRequestData.defaultDescription, "minWithdrawable": lnUrlWithdrawRequestData.minWithdrawable, "maxWithdrawable": lnUrlWithdrawRequestData.maxWithdrawable, ] } static func asLnUrlWithdrawRequestDataList(arr: [Any]) throws -> [LnUrlWithdrawRequestData] { var list = [LnUrlWithdrawRequestData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlWithdrawRequestData = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: val) list.append(lnUrlWithdrawRequestData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawRequestData")) } } return list } static func arrayOf(lnUrlWithdrawRequestDataList: [LnUrlWithdrawRequestData]) -> [Any] { return lnUrlWithdrawRequestDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlWithdrawRequestData: v) } } static func asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: [String: Any?]) throws -> LnUrlWithdrawSuccessData { guard let invoiceTmp = lnUrlWithdrawSuccessData["invoice"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "invoice", typeName: "LnUrlWithdrawSuccessData")) } let invoice = try asLnInvoice(lnInvoice: invoiceTmp) return LnUrlWithdrawSuccessData(invoice: invoice) } static func dictionaryOf(lnUrlWithdrawSuccessData: LnUrlWithdrawSuccessData) -> [String: Any?] { return [ "invoice": dictionaryOf(lnInvoice: lnUrlWithdrawSuccessData.invoice), ] } static func asLnUrlWithdrawSuccessDataList(arr: [Any]) throws -> [LnUrlWithdrawSuccessData] { var list = [LnUrlWithdrawSuccessData]() for value in arr { if let val = value as? [String: Any?] { var lnUrlWithdrawSuccessData = try asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: val) list.append(lnUrlWithdrawSuccessData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawSuccessData")) } } return list } static func arrayOf(lnUrlWithdrawSuccessDataList: [LnUrlWithdrawSuccessData]) -> [Any] { return lnUrlWithdrawSuccessDataList.map { v -> [String: Any?] in return dictionaryOf(lnUrlWithdrawSuccessData: v) } } static func asLocaleOverrides(localeOverrides: [String: Any?]) throws -> LocaleOverrides { guard let locale = localeOverrides["locale"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "locale", typeName: "LocaleOverrides")) } var spacing: UInt32? if hasNonNilKey(data: localeOverrides, key: "spacing") { guard let spacingTmp = localeOverrides["spacing"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "spacing")) } spacing = spacingTmp } guard let symbolTmp = localeOverrides["symbol"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "symbol", typeName: "LocaleOverrides")) } let symbol = try asSymbol(symbol: symbolTmp) return LocaleOverrides(locale: locale, spacing: spacing, symbol: symbol) } static func dictionaryOf(localeOverrides: LocaleOverrides) -> [String: Any?] { return [ "locale": localeOverrides.locale, "spacing": localeOverrides.spacing == nil ? nil : localeOverrides.spacing, "symbol": dictionaryOf(symbol: localeOverrides.symbol), ] } static func asLocaleOverridesList(arr: [Any]) throws -> [LocaleOverrides] { var list = [LocaleOverrides]() for value in arr { if let val = value as? [String: Any?] { var localeOverrides = try asLocaleOverrides(localeOverrides: val) list.append(localeOverrides) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LocaleOverrides")) } } return list } static func arrayOf(localeOverridesList: [LocaleOverrides]) -> [Any] { return localeOverridesList.map { v -> [String: Any?] in return dictionaryOf(localeOverrides: v) } } static func asLocalizedName(localizedName: [String: Any?]) throws -> LocalizedName { guard let locale = localizedName["locale"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "locale", typeName: "LocalizedName")) } guard let name = localizedName["name"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "name", typeName: "LocalizedName")) } return LocalizedName(locale: locale, name: name) } static func dictionaryOf(localizedName: LocalizedName) -> [String: Any?] { return [ "locale": localizedName.locale, "name": localizedName.name, ] } static func asLocalizedNameList(arr: [Any]) throws -> [LocalizedName] { var list = [LocalizedName]() for value in arr { if let val = value as? [String: Any?] { var localizedName = try asLocalizedName(localizedName: val) list.append(localizedName) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LocalizedName")) } } return list } static func arrayOf(localizedNameList: [LocalizedName]) -> [Any] { return localizedNameList.map { v -> [String: Any?] in return dictionaryOf(localizedName: v) } } static func asLogEntry(logEntry: [String: Any?]) throws -> LogEntry { guard let line = logEntry["line"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "line", typeName: "LogEntry")) } guard let level = logEntry["level"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "level", typeName: "LogEntry")) } return LogEntry(line: line, level: level) } static func dictionaryOf(logEntry: LogEntry) -> [String: Any?] { return [ "line": logEntry.line, "level": logEntry.level, ] } static func asLogEntryList(arr: [Any]) throws -> [LogEntry] { var list = [LogEntry]() for value in arr { if let val = value as? [String: Any?] { var logEntry = try asLogEntry(logEntry: val) list.append(logEntry) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LogEntry")) } } return list } static func arrayOf(logEntryList: [LogEntry]) -> [Any] { return logEntryList.map { v -> [String: Any?] in return dictionaryOf(logEntry: v) } } static func asMessageSuccessActionData(messageSuccessActionData: [String: Any?]) throws -> MessageSuccessActionData { guard let message = messageSuccessActionData["message"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "message", typeName: "MessageSuccessActionData")) } return MessageSuccessActionData(message: message) } static func dictionaryOf(messageSuccessActionData: MessageSuccessActionData) -> [String: Any?] { return [ "message": messageSuccessActionData.message, ] } static func asMessageSuccessActionDataList(arr: [Any]) throws -> [MessageSuccessActionData] { var list = [MessageSuccessActionData]() for value in arr { if let val = value as? [String: Any?] { var messageSuccessActionData = try asMessageSuccessActionData(messageSuccessActionData: val) list.append(messageSuccessActionData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "MessageSuccessActionData")) } } return list } static func arrayOf(messageSuccessActionDataList: [MessageSuccessActionData]) -> [Any] { return messageSuccessActionDataList.map { v -> [String: Any?] in return dictionaryOf(messageSuccessActionData: v) } } static func asOnchainPaymentLimitsResponse(onchainPaymentLimitsResponse: [String: Any?]) throws -> OnchainPaymentLimitsResponse { guard let sendTmp = onchainPaymentLimitsResponse["send"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "send", typeName: "OnchainPaymentLimitsResponse")) } let send = try asLimits(limits: sendTmp) guard let receiveTmp = onchainPaymentLimitsResponse["receive"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "receive", typeName: "OnchainPaymentLimitsResponse")) } let receive = try asLimits(limits: receiveTmp) return OnchainPaymentLimitsResponse(send: send, receive: receive) } static func dictionaryOf(onchainPaymentLimitsResponse: OnchainPaymentLimitsResponse) -> [String: Any?] { return [ "send": dictionaryOf(limits: onchainPaymentLimitsResponse.send), "receive": dictionaryOf(limits: onchainPaymentLimitsResponse.receive), ] } static func asOnchainPaymentLimitsResponseList(arr: [Any]) throws -> [OnchainPaymentLimitsResponse] { var list = [OnchainPaymentLimitsResponse]() for value in arr { if let val = value as? [String: Any?] { var onchainPaymentLimitsResponse = try asOnchainPaymentLimitsResponse(onchainPaymentLimitsResponse: val) list.append(onchainPaymentLimitsResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "OnchainPaymentLimitsResponse")) } } return list } static func arrayOf(onchainPaymentLimitsResponseList: [OnchainPaymentLimitsResponse]) -> [Any] { return onchainPaymentLimitsResponseList.map { v -> [String: Any?] in return dictionaryOf(onchainPaymentLimitsResponse: v) } } static func asPayOnchainRequest(payOnchainRequest: [String: Any?]) throws -> PayOnchainRequest { guard let address = payOnchainRequest["address"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "PayOnchainRequest")) } guard let prepareResponseTmp = payOnchainRequest["prepareResponse"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "prepareResponse", typeName: "PayOnchainRequest")) } let prepareResponse = try asPreparePayOnchainResponse(preparePayOnchainResponse: prepareResponseTmp) return PayOnchainRequest(address: address, prepareResponse: prepareResponse) } static func dictionaryOf(payOnchainRequest: PayOnchainRequest) -> [String: Any?] { return [ "address": payOnchainRequest.address, "prepareResponse": dictionaryOf(preparePayOnchainResponse: payOnchainRequest.prepareResponse), ] } static func asPayOnchainRequestList(arr: [Any]) throws -> [PayOnchainRequest] { var list = [PayOnchainRequest]() for value in arr { if let val = value as? [String: Any?] { var payOnchainRequest = try asPayOnchainRequest(payOnchainRequest: val) list.append(payOnchainRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PayOnchainRequest")) } } return list } static func arrayOf(payOnchainRequestList: [PayOnchainRequest]) -> [Any] { return payOnchainRequestList.map { v -> [String: Any?] in return dictionaryOf(payOnchainRequest: v) } } static func asPayment(payment: [String: Any?]) throws -> Payment { var destination: String? if hasNonNilKey(data: payment, key: "destination") { guard let destinationTmp = payment["destination"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "destination")) } destination = destinationTmp } var txId: String? if hasNonNilKey(data: payment, key: "txId") { guard let txIdTmp = payment["txId"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "txId")) } txId = txIdTmp } guard let timestamp = payment["timestamp"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "timestamp", typeName: "Payment")) } guard let amountSat = payment["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountSat", typeName: "Payment")) } guard let feesSat = payment["feesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesSat", typeName: "Payment")) } guard let paymentTypeTmp = payment["paymentType"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentType", typeName: "Payment")) } let paymentType = try asPaymentType(paymentType: paymentTypeTmp) guard let statusTmp = payment["status"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "status", typeName: "Payment")) } let status = try asPaymentState(paymentState: statusTmp) var details: PaymentDetails? if let detailsTmp = payment["details"] as? [String: Any?] { details = try asPaymentDetails(paymentDetails: detailsTmp) } return Payment(destination: destination, txId: txId, timestamp: timestamp, amountSat: amountSat, feesSat: feesSat, paymentType: paymentType, status: status, details: details) } static func dictionaryOf(payment: Payment) -> [String: Any?] { return [ "destination": payment.destination == nil ? nil : payment.destination, "txId": payment.txId == nil ? nil : payment.txId, "timestamp": payment.timestamp, "amountSat": payment.amountSat, "feesSat": payment.feesSat, "paymentType": valueOf(paymentType: payment.paymentType), "status": valueOf(paymentState: payment.status), "details": payment.details == nil ? nil : dictionaryOf(paymentDetails: payment.details!), ] } static func asPaymentList(arr: [Any]) throws -> [Payment] { var list = [Payment]() for value in arr { if let val = value as? [String: Any?] { var payment = try asPayment(payment: val) list.append(payment) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Payment")) } } return list } static func arrayOf(paymentList: [Payment]) -> [Any] { return paymentList.map { v -> [String: Any?] in return dictionaryOf(payment: v) } } static func asPrepareBuyBitcoinRequest(prepareBuyBitcoinRequest: [String: Any?]) throws -> PrepareBuyBitcoinRequest { guard let providerTmp = prepareBuyBitcoinRequest["provider"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "provider", typeName: "PrepareBuyBitcoinRequest")) } let provider = try asBuyBitcoinProvider(buyBitcoinProvider: providerTmp) guard let amountSat = prepareBuyBitcoinRequest["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountSat", typeName: "PrepareBuyBitcoinRequest")) } return PrepareBuyBitcoinRequest(provider: provider, amountSat: amountSat) } static func dictionaryOf(prepareBuyBitcoinRequest: PrepareBuyBitcoinRequest) -> [String: Any?] { return [ "provider": valueOf(buyBitcoinProvider: prepareBuyBitcoinRequest.provider), "amountSat": prepareBuyBitcoinRequest.amountSat, ] } static func asPrepareBuyBitcoinRequestList(arr: [Any]) throws -> [PrepareBuyBitcoinRequest] { var list = [PrepareBuyBitcoinRequest]() for value in arr { if let val = value as? [String: Any?] { var prepareBuyBitcoinRequest = try asPrepareBuyBitcoinRequest(prepareBuyBitcoinRequest: val) list.append(prepareBuyBitcoinRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareBuyBitcoinRequest")) } } return list } static func arrayOf(prepareBuyBitcoinRequestList: [PrepareBuyBitcoinRequest]) -> [Any] { return prepareBuyBitcoinRequestList.map { v -> [String: Any?] in return dictionaryOf(prepareBuyBitcoinRequest: v) } } static func asPrepareBuyBitcoinResponse(prepareBuyBitcoinResponse: [String: Any?]) throws -> PrepareBuyBitcoinResponse { guard let providerTmp = prepareBuyBitcoinResponse["provider"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "provider", typeName: "PrepareBuyBitcoinResponse")) } let provider = try asBuyBitcoinProvider(buyBitcoinProvider: providerTmp) guard let amountSat = prepareBuyBitcoinResponse["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountSat", typeName: "PrepareBuyBitcoinResponse")) } guard let feesSat = prepareBuyBitcoinResponse["feesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesSat", typeName: "PrepareBuyBitcoinResponse")) } return PrepareBuyBitcoinResponse(provider: provider, amountSat: amountSat, feesSat: feesSat) } static func dictionaryOf(prepareBuyBitcoinResponse: PrepareBuyBitcoinResponse) -> [String: Any?] { return [ "provider": valueOf(buyBitcoinProvider: prepareBuyBitcoinResponse.provider), "amountSat": prepareBuyBitcoinResponse.amountSat, "feesSat": prepareBuyBitcoinResponse.feesSat, ] } static func asPrepareBuyBitcoinResponseList(arr: [Any]) throws -> [PrepareBuyBitcoinResponse] { var list = [PrepareBuyBitcoinResponse]() for value in arr { if let val = value as? [String: Any?] { var prepareBuyBitcoinResponse = try asPrepareBuyBitcoinResponse(prepareBuyBitcoinResponse: val) list.append(prepareBuyBitcoinResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareBuyBitcoinResponse")) } } return list } static func arrayOf(prepareBuyBitcoinResponseList: [PrepareBuyBitcoinResponse]) -> [Any] { return prepareBuyBitcoinResponseList.map { v -> [String: Any?] in return dictionaryOf(prepareBuyBitcoinResponse: v) } } static func asPreparePayOnchainRequest(preparePayOnchainRequest: [String: Any?]) throws -> PreparePayOnchainRequest { guard let receiverAmountSat = preparePayOnchainRequest["receiverAmountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "receiverAmountSat", typeName: "PreparePayOnchainRequest")) } var satPerVbyte: UInt32? if hasNonNilKey(data: preparePayOnchainRequest, key: "satPerVbyte") { guard let satPerVbyteTmp = preparePayOnchainRequest["satPerVbyte"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "satPerVbyte")) } satPerVbyte = satPerVbyteTmp } return PreparePayOnchainRequest(receiverAmountSat: receiverAmountSat, satPerVbyte: satPerVbyte) } static func dictionaryOf(preparePayOnchainRequest: PreparePayOnchainRequest) -> [String: Any?] { return [ "receiverAmountSat": preparePayOnchainRequest.receiverAmountSat, "satPerVbyte": preparePayOnchainRequest.satPerVbyte == nil ? nil : preparePayOnchainRequest.satPerVbyte, ] } static func asPreparePayOnchainRequestList(arr: [Any]) throws -> [PreparePayOnchainRequest] { var list = [PreparePayOnchainRequest]() for value in arr { if let val = value as? [String: Any?] { var preparePayOnchainRequest = try asPreparePayOnchainRequest(preparePayOnchainRequest: val) list.append(preparePayOnchainRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PreparePayOnchainRequest")) } } return list } static func arrayOf(preparePayOnchainRequestList: [PreparePayOnchainRequest]) -> [Any] { return preparePayOnchainRequestList.map { v -> [String: Any?] in return dictionaryOf(preparePayOnchainRequest: v) } } static func asPreparePayOnchainResponse(preparePayOnchainResponse: [String: Any?]) throws -> PreparePayOnchainResponse { guard let receiverAmountSat = preparePayOnchainResponse["receiverAmountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "receiverAmountSat", typeName: "PreparePayOnchainResponse")) } guard let claimFeesSat = preparePayOnchainResponse["claimFeesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "claimFeesSat", typeName: "PreparePayOnchainResponse")) } guard let totalFeesSat = preparePayOnchainResponse["totalFeesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "totalFeesSat", typeName: "PreparePayOnchainResponse")) } return PreparePayOnchainResponse(receiverAmountSat: receiverAmountSat, claimFeesSat: claimFeesSat, totalFeesSat: totalFeesSat) } static func dictionaryOf(preparePayOnchainResponse: PreparePayOnchainResponse) -> [String: Any?] { return [ "receiverAmountSat": preparePayOnchainResponse.receiverAmountSat, "claimFeesSat": preparePayOnchainResponse.claimFeesSat, "totalFeesSat": preparePayOnchainResponse.totalFeesSat, ] } static func asPreparePayOnchainResponseList(arr: [Any]) throws -> [PreparePayOnchainResponse] { var list = [PreparePayOnchainResponse]() for value in arr { if let val = value as? [String: Any?] { var preparePayOnchainResponse = try asPreparePayOnchainResponse(preparePayOnchainResponse: val) list.append(preparePayOnchainResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PreparePayOnchainResponse")) } } return list } static func arrayOf(preparePayOnchainResponseList: [PreparePayOnchainResponse]) -> [Any] { return preparePayOnchainResponseList.map { v -> [String: Any?] in return dictionaryOf(preparePayOnchainResponse: v) } } static func asPrepareReceiveRequest(prepareReceiveRequest: [String: Any?]) throws -> PrepareReceiveRequest { var payerAmountSat: UInt64? if hasNonNilKey(data: prepareReceiveRequest, key: "payerAmountSat") { guard let payerAmountSatTmp = prepareReceiveRequest["payerAmountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "payerAmountSat")) } payerAmountSat = payerAmountSatTmp } guard let paymentMethodTmp = prepareReceiveRequest["paymentMethod"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentMethod", typeName: "PrepareReceiveRequest")) } let paymentMethod = try asPaymentMethod(paymentMethod: paymentMethodTmp) return PrepareReceiveRequest(payerAmountSat: payerAmountSat, paymentMethod: paymentMethod) } static func dictionaryOf(prepareReceiveRequest: PrepareReceiveRequest) -> [String: Any?] { return [ "payerAmountSat": prepareReceiveRequest.payerAmountSat == nil ? nil : prepareReceiveRequest.payerAmountSat, "paymentMethod": valueOf(paymentMethod: prepareReceiveRequest.paymentMethod), ] } static func asPrepareReceiveRequestList(arr: [Any]) throws -> [PrepareReceiveRequest] { var list = [PrepareReceiveRequest]() for value in arr { if let val = value as? [String: Any?] { var prepareReceiveRequest = try asPrepareReceiveRequest(prepareReceiveRequest: val) list.append(prepareReceiveRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareReceiveRequest")) } } return list } static func arrayOf(prepareReceiveRequestList: [PrepareReceiveRequest]) -> [Any] { return prepareReceiveRequestList.map { v -> [String: Any?] in return dictionaryOf(prepareReceiveRequest: v) } } static func asPrepareReceiveResponse(prepareReceiveResponse: [String: Any?]) throws -> PrepareReceiveResponse { var payerAmountSat: UInt64? if hasNonNilKey(data: prepareReceiveResponse, key: "payerAmountSat") { guard let payerAmountSatTmp = prepareReceiveResponse["payerAmountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "payerAmountSat")) } payerAmountSat = payerAmountSatTmp } guard let paymentMethodTmp = prepareReceiveResponse["paymentMethod"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "paymentMethod", typeName: "PrepareReceiveResponse")) } let paymentMethod = try asPaymentMethod(paymentMethod: paymentMethodTmp) guard let feesSat = prepareReceiveResponse["feesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesSat", typeName: "PrepareReceiveResponse")) } return PrepareReceiveResponse(payerAmountSat: payerAmountSat, paymentMethod: paymentMethod, feesSat: feesSat) } static func dictionaryOf(prepareReceiveResponse: PrepareReceiveResponse) -> [String: Any?] { return [ "payerAmountSat": prepareReceiveResponse.payerAmountSat == nil ? nil : prepareReceiveResponse.payerAmountSat, "paymentMethod": valueOf(paymentMethod: prepareReceiveResponse.paymentMethod), "feesSat": prepareReceiveResponse.feesSat, ] } static func asPrepareReceiveResponseList(arr: [Any]) throws -> [PrepareReceiveResponse] { var list = [PrepareReceiveResponse]() for value in arr { if let val = value as? [String: Any?] { var prepareReceiveResponse = try asPrepareReceiveResponse(prepareReceiveResponse: val) list.append(prepareReceiveResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareReceiveResponse")) } } return list } static func arrayOf(prepareReceiveResponseList: [PrepareReceiveResponse]) -> [Any] { return prepareReceiveResponseList.map { v -> [String: Any?] in return dictionaryOf(prepareReceiveResponse: v) } } static func asPrepareRefundRequest(prepareRefundRequest: [String: Any?]) throws -> PrepareRefundRequest { guard let swapAddress = prepareRefundRequest["swapAddress"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "swapAddress", typeName: "PrepareRefundRequest")) } guard let refundAddress = prepareRefundRequest["refundAddress"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "refundAddress", typeName: "PrepareRefundRequest")) } guard let satPerVbyte = prepareRefundRequest["satPerVbyte"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "satPerVbyte", typeName: "PrepareRefundRequest")) } return PrepareRefundRequest(swapAddress: swapAddress, refundAddress: refundAddress, satPerVbyte: satPerVbyte) } static func dictionaryOf(prepareRefundRequest: PrepareRefundRequest) -> [String: Any?] { return [ "swapAddress": prepareRefundRequest.swapAddress, "refundAddress": prepareRefundRequest.refundAddress, "satPerVbyte": prepareRefundRequest.satPerVbyte, ] } static func asPrepareRefundRequestList(arr: [Any]) throws -> [PrepareRefundRequest] { var list = [PrepareRefundRequest]() for value in arr { if let val = value as? [String: Any?] { var prepareRefundRequest = try asPrepareRefundRequest(prepareRefundRequest: val) list.append(prepareRefundRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareRefundRequest")) } } return list } static func arrayOf(prepareRefundRequestList: [PrepareRefundRequest]) -> [Any] { return prepareRefundRequestList.map { v -> [String: Any?] in return dictionaryOf(prepareRefundRequest: v) } } static func asPrepareRefundResponse(prepareRefundResponse: [String: Any?]) throws -> PrepareRefundResponse { guard let txVsize = prepareRefundResponse["txVsize"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "txVsize", typeName: "PrepareRefundResponse")) } guard let txFeeSat = prepareRefundResponse["txFeeSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "txFeeSat", typeName: "PrepareRefundResponse")) } var refundTxId: String? if hasNonNilKey(data: prepareRefundResponse, key: "refundTxId") { guard let refundTxIdTmp = prepareRefundResponse["refundTxId"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "refundTxId")) } refundTxId = refundTxIdTmp } return PrepareRefundResponse(txVsize: txVsize, txFeeSat: txFeeSat, refundTxId: refundTxId) } static func dictionaryOf(prepareRefundResponse: PrepareRefundResponse) -> [String: Any?] { return [ "txVsize": prepareRefundResponse.txVsize, "txFeeSat": prepareRefundResponse.txFeeSat, "refundTxId": prepareRefundResponse.refundTxId == nil ? nil : prepareRefundResponse.refundTxId, ] } static func asPrepareRefundResponseList(arr: [Any]) throws -> [PrepareRefundResponse] { var list = [PrepareRefundResponse]() for value in arr { if let val = value as? [String: Any?] { var prepareRefundResponse = try asPrepareRefundResponse(prepareRefundResponse: val) list.append(prepareRefundResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareRefundResponse")) } } return list } static func arrayOf(prepareRefundResponseList: [PrepareRefundResponse]) -> [Any] { return prepareRefundResponseList.map { v -> [String: Any?] in return dictionaryOf(prepareRefundResponse: v) } } static func asPrepareSendRequest(prepareSendRequest: [String: Any?]) throws -> PrepareSendRequest { guard let destination = prepareSendRequest["destination"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "destination", typeName: "PrepareSendRequest")) } var amountSat: UInt64? if hasNonNilKey(data: prepareSendRequest, key: "amountSat") { guard let amountSatTmp = prepareSendRequest["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "amountSat")) } amountSat = amountSatTmp } return PrepareSendRequest(destination: destination, amountSat: amountSat) } static func dictionaryOf(prepareSendRequest: PrepareSendRequest) -> [String: Any?] { return [ "destination": prepareSendRequest.destination, "amountSat": prepareSendRequest.amountSat == nil ? nil : prepareSendRequest.amountSat, ] } static func asPrepareSendRequestList(arr: [Any]) throws -> [PrepareSendRequest] { var list = [PrepareSendRequest]() for value in arr { if let val = value as? [String: Any?] { var prepareSendRequest = try asPrepareSendRequest(prepareSendRequest: val) list.append(prepareSendRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareSendRequest")) } } return list } static func arrayOf(prepareSendRequestList: [PrepareSendRequest]) -> [Any] { return prepareSendRequestList.map { v -> [String: Any?] in return dictionaryOf(prepareSendRequest: v) } } static func asPrepareSendResponse(prepareSendResponse: [String: Any?]) throws -> PrepareSendResponse { guard let destinationTmp = prepareSendResponse["destination"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "destination", typeName: "PrepareSendResponse")) } let destination = try asSendDestination(sendDestination: destinationTmp) guard let feesSat = prepareSendResponse["feesSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesSat", typeName: "PrepareSendResponse")) } return PrepareSendResponse(destination: destination, feesSat: feesSat) } static func dictionaryOf(prepareSendResponse: PrepareSendResponse) -> [String: Any?] { return [ "destination": dictionaryOf(sendDestination: prepareSendResponse.destination), "feesSat": prepareSendResponse.feesSat, ] } static func asPrepareSendResponseList(arr: [Any]) throws -> [PrepareSendResponse] { var list = [PrepareSendResponse]() for value in arr { if let val = value as? [String: Any?] { var prepareSendResponse = try asPrepareSendResponse(prepareSendResponse: val) list.append(prepareSendResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PrepareSendResponse")) } } return list } static func arrayOf(prepareSendResponseList: [PrepareSendResponse]) -> [Any] { return prepareSendResponseList.map { v -> [String: Any?] in return dictionaryOf(prepareSendResponse: v) } } static func asRate(rate: [String: Any?]) throws -> Rate { guard let coin = rate["coin"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "coin", typeName: "Rate")) } guard let value = rate["value"] as? Double else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "value", typeName: "Rate")) } return Rate(coin: coin, value: value) } static func dictionaryOf(rate: Rate) -> [String: Any?] { return [ "coin": rate.coin, "value": rate.value, ] } static func asRateList(arr: [Any]) throws -> [Rate] { var list = [Rate]() for value in arr { if let val = value as? [String: Any?] { var rate = try asRate(rate: val) list.append(rate) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Rate")) } } return list } static func arrayOf(rateList: [Rate]) -> [Any] { return rateList.map { v -> [String: Any?] in return dictionaryOf(rate: v) } } static func asReceivePaymentRequest(receivePaymentRequest: [String: Any?]) throws -> ReceivePaymentRequest { guard let prepareResponseTmp = receivePaymentRequest["prepareResponse"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "prepareResponse", typeName: "ReceivePaymentRequest")) } let prepareResponse = try asPrepareReceiveResponse(prepareReceiveResponse: prepareResponseTmp) var description: String? if hasNonNilKey(data: receivePaymentRequest, key: "description") { guard let descriptionTmp = receivePaymentRequest["description"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "description")) } description = descriptionTmp } return ReceivePaymentRequest(prepareResponse: prepareResponse, description: description) } static func dictionaryOf(receivePaymentRequest: ReceivePaymentRequest) -> [String: Any?] { return [ "prepareResponse": dictionaryOf(prepareReceiveResponse: receivePaymentRequest.prepareResponse), "description": receivePaymentRequest.description == nil ? nil : receivePaymentRequest.description, ] } static func asReceivePaymentRequestList(arr: [Any]) throws -> [ReceivePaymentRequest] { var list = [ReceivePaymentRequest]() for value in arr { if let val = value as? [String: Any?] { var receivePaymentRequest = try asReceivePaymentRequest(receivePaymentRequest: val) list.append(receivePaymentRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "ReceivePaymentRequest")) } } return list } static func arrayOf(receivePaymentRequestList: [ReceivePaymentRequest]) -> [Any] { return receivePaymentRequestList.map { v -> [String: Any?] in return dictionaryOf(receivePaymentRequest: v) } } static func asReceivePaymentResponse(receivePaymentResponse: [String: Any?]) throws -> ReceivePaymentResponse { guard let destination = receivePaymentResponse["destination"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "destination", typeName: "ReceivePaymentResponse")) } return ReceivePaymentResponse(destination: destination) } static func dictionaryOf(receivePaymentResponse: ReceivePaymentResponse) -> [String: Any?] { return [ "destination": receivePaymentResponse.destination, ] } static func asReceivePaymentResponseList(arr: [Any]) throws -> [ReceivePaymentResponse] { var list = [ReceivePaymentResponse]() for value in arr { if let val = value as? [String: Any?] { var receivePaymentResponse = try asReceivePaymentResponse(receivePaymentResponse: val) list.append(receivePaymentResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "ReceivePaymentResponse")) } } return list } static func arrayOf(receivePaymentResponseList: [ReceivePaymentResponse]) -> [Any] { return receivePaymentResponseList.map { v -> [String: Any?] in return dictionaryOf(receivePaymentResponse: v) } } static func asRecommendedFees(recommendedFees: [String: Any?]) throws -> RecommendedFees { guard let fastestFee = recommendedFees["fastestFee"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "fastestFee", typeName: "RecommendedFees")) } guard let halfHourFee = recommendedFees["halfHourFee"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "halfHourFee", typeName: "RecommendedFees")) } guard let hourFee = recommendedFees["hourFee"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "hourFee", typeName: "RecommendedFees")) } guard let economyFee = recommendedFees["economyFee"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "economyFee", typeName: "RecommendedFees")) } guard let minimumFee = recommendedFees["minimumFee"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "minimumFee", typeName: "RecommendedFees")) } return RecommendedFees(fastestFee: fastestFee, halfHourFee: halfHourFee, hourFee: hourFee, economyFee: economyFee, minimumFee: minimumFee) } static func dictionaryOf(recommendedFees: RecommendedFees) -> [String: Any?] { return [ "fastestFee": recommendedFees.fastestFee, "halfHourFee": recommendedFees.halfHourFee, "hourFee": recommendedFees.hourFee, "economyFee": recommendedFees.economyFee, "minimumFee": recommendedFees.minimumFee, ] } static func asRecommendedFeesList(arr: [Any]) throws -> [RecommendedFees] { var list = [RecommendedFees]() for value in arr { if let val = value as? [String: Any?] { var recommendedFees = try asRecommendedFees(recommendedFees: val) list.append(recommendedFees) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RecommendedFees")) } } return list } static func arrayOf(recommendedFeesList: [RecommendedFees]) -> [Any] { return recommendedFeesList.map { v -> [String: Any?] in return dictionaryOf(recommendedFees: v) } } static func asRefundRequest(refundRequest: [String: Any?]) throws -> RefundRequest { guard let swapAddress = refundRequest["swapAddress"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "swapAddress", typeName: "RefundRequest")) } guard let refundAddress = refundRequest["refundAddress"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "refundAddress", typeName: "RefundRequest")) } guard let satPerVbyte = refundRequest["satPerVbyte"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "satPerVbyte", typeName: "RefundRequest")) } return RefundRequest(swapAddress: swapAddress, refundAddress: refundAddress, satPerVbyte: satPerVbyte) } static func dictionaryOf(refundRequest: RefundRequest) -> [String: Any?] { return [ "swapAddress": refundRequest.swapAddress, "refundAddress": refundRequest.refundAddress, "satPerVbyte": refundRequest.satPerVbyte, ] } static func asRefundRequestList(arr: [Any]) throws -> [RefundRequest] { var list = [RefundRequest]() for value in arr { if let val = value as? [String: Any?] { var refundRequest = try asRefundRequest(refundRequest: val) list.append(refundRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RefundRequest")) } } return list } static func arrayOf(refundRequestList: [RefundRequest]) -> [Any] { return refundRequestList.map { v -> [String: Any?] in return dictionaryOf(refundRequest: v) } } static func asRefundResponse(refundResponse: [String: Any?]) throws -> RefundResponse { guard let refundTxId = refundResponse["refundTxId"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "refundTxId", typeName: "RefundResponse")) } return RefundResponse(refundTxId: refundTxId) } static func dictionaryOf(refundResponse: RefundResponse) -> [String: Any?] { return [ "refundTxId": refundResponse.refundTxId, ] } static func asRefundResponseList(arr: [Any]) throws -> [RefundResponse] { var list = [RefundResponse]() for value in arr { if let val = value as? [String: Any?] { var refundResponse = try asRefundResponse(refundResponse: val) list.append(refundResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RefundResponse")) } } return list } static func arrayOf(refundResponseList: [RefundResponse]) -> [Any] { return refundResponseList.map { v -> [String: Any?] in return dictionaryOf(refundResponse: v) } } static func asRefundableSwap(refundableSwap: [String: Any?]) throws -> RefundableSwap { guard let swapAddress = refundableSwap["swapAddress"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "swapAddress", typeName: "RefundableSwap")) } guard let timestamp = refundableSwap["timestamp"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "timestamp", typeName: "RefundableSwap")) } guard let amountSat = refundableSwap["amountSat"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "amountSat", typeName: "RefundableSwap")) } return RefundableSwap(swapAddress: swapAddress, timestamp: timestamp, amountSat: amountSat) } static func dictionaryOf(refundableSwap: RefundableSwap) -> [String: Any?] { return [ "swapAddress": refundableSwap.swapAddress, "timestamp": refundableSwap.timestamp, "amountSat": refundableSwap.amountSat, ] } static func asRefundableSwapList(arr: [Any]) throws -> [RefundableSwap] { var list = [RefundableSwap]() for value in arr { if let val = value as? [String: Any?] { var refundableSwap = try asRefundableSwap(refundableSwap: val) list.append(refundableSwap) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RefundableSwap")) } } return list } static func arrayOf(refundableSwapList: [RefundableSwap]) -> [Any] { return refundableSwapList.map { v -> [String: Any?] in return dictionaryOf(refundableSwap: v) } } static func asRestoreRequest(restoreRequest: [String: Any?]) throws -> RestoreRequest { var backupPath: String? if hasNonNilKey(data: restoreRequest, key: "backupPath") { guard let backupPathTmp = restoreRequest["backupPath"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "backupPath")) } backupPath = backupPathTmp } return RestoreRequest(backupPath: backupPath) } static func dictionaryOf(restoreRequest: RestoreRequest) -> [String: Any?] { return [ "backupPath": restoreRequest.backupPath == nil ? nil : restoreRequest.backupPath, ] } static func asRestoreRequestList(arr: [Any]) throws -> [RestoreRequest] { var list = [RestoreRequest]() for value in arr { if let val = value as? [String: Any?] { var restoreRequest = try asRestoreRequest(restoreRequest: val) list.append(restoreRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RestoreRequest")) } } return list } static func arrayOf(restoreRequestList: [RestoreRequest]) -> [Any] { return restoreRequestList.map { v -> [String: Any?] in return dictionaryOf(restoreRequest: v) } } static func asRouteHint(routeHint: [String: Any?]) throws -> RouteHint { guard let hopsTmp = routeHint["hops"] as? [[String: Any?]] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "hops", typeName: "RouteHint")) } let hops = try asRouteHintHopList(arr: hopsTmp) return RouteHint(hops: hops) } static func dictionaryOf(routeHint: RouteHint) -> [String: Any?] { return [ "hops": arrayOf(routeHintHopList: routeHint.hops), ] } static func asRouteHintList(arr: [Any]) throws -> [RouteHint] { var list = [RouteHint]() for value in arr { if let val = value as? [String: Any?] { var routeHint = try asRouteHint(routeHint: val) list.append(routeHint) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RouteHint")) } } return list } static func arrayOf(routeHintList: [RouteHint]) -> [Any] { return routeHintList.map { v -> [String: Any?] in return dictionaryOf(routeHint: v) } } static func asRouteHintHop(routeHintHop: [String: Any?]) throws -> RouteHintHop { guard let srcNodeId = routeHintHop["srcNodeId"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "srcNodeId", typeName: "RouteHintHop")) } guard let shortChannelId = routeHintHop["shortChannelId"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "shortChannelId", typeName: "RouteHintHop")) } guard let feesBaseMsat = routeHintHop["feesBaseMsat"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesBaseMsat", typeName: "RouteHintHop")) } guard let feesProportionalMillionths = routeHintHop["feesProportionalMillionths"] as? UInt32 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "feesProportionalMillionths", typeName: "RouteHintHop")) } guard let cltvExpiryDelta = routeHintHop["cltvExpiryDelta"] as? UInt64 else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "cltvExpiryDelta", typeName: "RouteHintHop")) } var htlcMinimumMsat: UInt64? if hasNonNilKey(data: routeHintHop, key: "htlcMinimumMsat") { guard let htlcMinimumMsatTmp = routeHintHop["htlcMinimumMsat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "htlcMinimumMsat")) } htlcMinimumMsat = htlcMinimumMsatTmp } var htlcMaximumMsat: UInt64? if hasNonNilKey(data: routeHintHop, key: "htlcMaximumMsat") { guard let htlcMaximumMsatTmp = routeHintHop["htlcMaximumMsat"] as? UInt64 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "htlcMaximumMsat")) } htlcMaximumMsat = htlcMaximumMsatTmp } return RouteHintHop(srcNodeId: srcNodeId, shortChannelId: shortChannelId, feesBaseMsat: feesBaseMsat, feesProportionalMillionths: feesProportionalMillionths, cltvExpiryDelta: cltvExpiryDelta, htlcMinimumMsat: htlcMinimumMsat, htlcMaximumMsat: htlcMaximumMsat) } static func dictionaryOf(routeHintHop: RouteHintHop) -> [String: Any?] { return [ "srcNodeId": routeHintHop.srcNodeId, "shortChannelId": routeHintHop.shortChannelId, "feesBaseMsat": routeHintHop.feesBaseMsat, "feesProportionalMillionths": routeHintHop.feesProportionalMillionths, "cltvExpiryDelta": routeHintHop.cltvExpiryDelta, "htlcMinimumMsat": routeHintHop.htlcMinimumMsat == nil ? nil : routeHintHop.htlcMinimumMsat, "htlcMaximumMsat": routeHintHop.htlcMaximumMsat == nil ? nil : routeHintHop.htlcMaximumMsat, ] } static func asRouteHintHopList(arr: [Any]) throws -> [RouteHintHop] { var list = [RouteHintHop]() for value in arr { if let val = value as? [String: Any?] { var routeHintHop = try asRouteHintHop(routeHintHop: val) list.append(routeHintHop) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "RouteHintHop")) } } return list } static func arrayOf(routeHintHopList: [RouteHintHop]) -> [Any] { return routeHintHopList.map { v -> [String: Any?] in return dictionaryOf(routeHintHop: v) } } static func asSendPaymentRequest(sendPaymentRequest: [String: Any?]) throws -> SendPaymentRequest { guard let prepareResponseTmp = sendPaymentRequest["prepareResponse"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "prepareResponse", typeName: "SendPaymentRequest")) } let prepareResponse = try asPrepareSendResponse(prepareSendResponse: prepareResponseTmp) return SendPaymentRequest(prepareResponse: prepareResponse) } static func dictionaryOf(sendPaymentRequest: SendPaymentRequest) -> [String: Any?] { return [ "prepareResponse": dictionaryOf(prepareSendResponse: sendPaymentRequest.prepareResponse), ] } static func asSendPaymentRequestList(arr: [Any]) throws -> [SendPaymentRequest] { var list = [SendPaymentRequest]() for value in arr { if let val = value as? [String: Any?] { var sendPaymentRequest = try asSendPaymentRequest(sendPaymentRequest: val) list.append(sendPaymentRequest) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "SendPaymentRequest")) } } return list } static func arrayOf(sendPaymentRequestList: [SendPaymentRequest]) -> [Any] { return sendPaymentRequestList.map { v -> [String: Any?] in return dictionaryOf(sendPaymentRequest: v) } } static func asSendPaymentResponse(sendPaymentResponse: [String: Any?]) throws -> SendPaymentResponse { guard let paymentTmp = sendPaymentResponse["payment"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "payment", typeName: "SendPaymentResponse")) } let payment = try asPayment(payment: paymentTmp) return SendPaymentResponse(payment: payment) } static func dictionaryOf(sendPaymentResponse: SendPaymentResponse) -> [String: Any?] { return [ "payment": dictionaryOf(payment: sendPaymentResponse.payment), ] } static func asSendPaymentResponseList(arr: [Any]) throws -> [SendPaymentResponse] { var list = [SendPaymentResponse]() for value in arr { if let val = value as? [String: Any?] { var sendPaymentResponse = try asSendPaymentResponse(sendPaymentResponse: val) list.append(sendPaymentResponse) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "SendPaymentResponse")) } } return list } static func arrayOf(sendPaymentResponseList: [SendPaymentResponse]) -> [Any] { return sendPaymentResponseList.map { v -> [String: Any?] in return dictionaryOf(sendPaymentResponse: v) } } static func asSymbol(symbol: [String: Any?]) throws -> Symbol { var grapheme: String? if hasNonNilKey(data: symbol, key: "grapheme") { guard let graphemeTmp = symbol["grapheme"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "grapheme")) } grapheme = graphemeTmp } var template: String? if hasNonNilKey(data: symbol, key: "template") { guard let templateTmp = symbol["template"] as? String else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "template")) } template = templateTmp } var rtl: Bool? if hasNonNilKey(data: symbol, key: "rtl") { guard let rtlTmp = symbol["rtl"] as? Bool else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "rtl")) } rtl = rtlTmp } var position: UInt32? if hasNonNilKey(data: symbol, key: "position") { guard let positionTmp = symbol["position"] as? UInt32 else { throw SdkError.Generic(message: errUnexpectedValue(fieldName: "position")) } position = positionTmp } return Symbol(grapheme: grapheme, template: template, rtl: rtl, position: position) } static func dictionaryOf(symbol: Symbol) -> [String: Any?] { return [ "grapheme": symbol.grapheme == nil ? nil : symbol.grapheme, "template": symbol.template == nil ? nil : symbol.template, "rtl": symbol.rtl == nil ? nil : symbol.rtl, "position": symbol.position == nil ? nil : symbol.position, ] } static func asSymbolList(arr: [Any]) throws -> [Symbol] { var list = [Symbol]() for value in arr { if let val = value as? [String: Any?] { var symbol = try asSymbol(symbol: val) list.append(symbol) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Symbol")) } } return list } static func arrayOf(symbolList: [Symbol]) -> [Any] { return symbolList.map { v -> [String: Any?] in return dictionaryOf(symbol: v) } } static func asUrlSuccessActionData(urlSuccessActionData: [String: Any?]) throws -> UrlSuccessActionData { guard let description = urlSuccessActionData["description"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "UrlSuccessActionData")) } guard let url = urlSuccessActionData["url"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "UrlSuccessActionData")) } guard let matchesCallbackDomain = urlSuccessActionData["matchesCallbackDomain"] as? Bool else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "matchesCallbackDomain", typeName: "UrlSuccessActionData")) } return UrlSuccessActionData(description: description, url: url, matchesCallbackDomain: matchesCallbackDomain) } static func dictionaryOf(urlSuccessActionData: UrlSuccessActionData) -> [String: Any?] { return [ "description": urlSuccessActionData.description, "url": urlSuccessActionData.url, "matchesCallbackDomain": urlSuccessActionData.matchesCallbackDomain, ] } static func asUrlSuccessActionDataList(arr: [Any]) throws -> [UrlSuccessActionData] { var list = [UrlSuccessActionData]() for value in arr { if let val = value as? [String: Any?] { var urlSuccessActionData = try asUrlSuccessActionData(urlSuccessActionData: val) list.append(urlSuccessActionData) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "UrlSuccessActionData")) } } return list } static func arrayOf(urlSuccessActionDataList: [UrlSuccessActionData]) -> [Any] { return urlSuccessActionDataList.map { v -> [String: Any?] in return dictionaryOf(urlSuccessActionData: v) } } static func asAesSuccessActionDataResult(aesSuccessActionDataResult: [String: Any?]) throws -> AesSuccessActionDataResult { let type = aesSuccessActionDataResult["type"] as! String if type == "decrypted" { guard let dataTmp = aesSuccessActionDataResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "AesSuccessActionDataResult")) } let _data = try asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: dataTmp) return AesSuccessActionDataResult.decrypted(data: _data) } if type == "errorStatus" { guard let _reason = aesSuccessActionDataResult["reason"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "reason", typeName: "AesSuccessActionDataResult")) } return AesSuccessActionDataResult.errorStatus(reason: _reason) } throw SdkError.Generic(message: "Unexpected type \(type) for enum AesSuccessActionDataResult") } static func dictionaryOf(aesSuccessActionDataResult: AesSuccessActionDataResult) -> [String: Any?] { switch aesSuccessActionDataResult { case let .decrypted( data ): return [ "type": "decrypted", "data": dictionaryOf(aesSuccessActionDataDecrypted: data), ] case let .errorStatus( reason ): return [ "type": "errorStatus", "reason": reason, ] } } static func arrayOf(aesSuccessActionDataResultList: [AesSuccessActionDataResult]) -> [Any] { return aesSuccessActionDataResultList.map { v -> [String: Any?] in return dictionaryOf(aesSuccessActionDataResult: v) } } static func asAesSuccessActionDataResultList(arr: [Any]) throws -> [AesSuccessActionDataResult] { var list = [AesSuccessActionDataResult]() for value in arr { if let val = value as? [String: Any?] { var aesSuccessActionDataResult = try asAesSuccessActionDataResult(aesSuccessActionDataResult: val) list.append(aesSuccessActionDataResult) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "AesSuccessActionDataResult")) } } return list } static func asBuyBitcoinProvider(buyBitcoinProvider: String) throws -> BuyBitcoinProvider { switch buyBitcoinProvider { case "moonpay": return BuyBitcoinProvider.moonpay default: throw SdkError.Generic(message: "Invalid variant \(buyBitcoinProvider) for enum BuyBitcoinProvider") } } static func valueOf(buyBitcoinProvider: BuyBitcoinProvider) -> String { switch buyBitcoinProvider { case .moonpay: return "moonpay" } } static func arrayOf(buyBitcoinProviderList: [BuyBitcoinProvider]) -> [String] { return buyBitcoinProviderList.map { v -> String in return valueOf(buyBitcoinProvider: v) } } static func asBuyBitcoinProviderList(arr: [Any]) throws -> [BuyBitcoinProvider] { var list = [BuyBitcoinProvider]() for value in arr { if let val = value as? String { var buyBitcoinProvider = try asBuyBitcoinProvider(buyBitcoinProvider: val) list.append(buyBitcoinProvider) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "BuyBitcoinProvider")) } } return list } static func asInputType(inputType: [String: Any?]) throws -> InputType { let type = inputType["type"] as! String if type == "bitcoinAddress" { guard let addressTmp = inputType["address"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "InputType")) } let _address = try asBitcoinAddressData(bitcoinAddressData: addressTmp) return InputType.bitcoinAddress(address: _address) } if type == "liquidAddress" { guard let addressTmp = inputType["address"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "address", typeName: "InputType")) } let _address = try asLiquidAddressData(liquidAddressData: addressTmp) return InputType.liquidAddress(address: _address) } if type == "bolt11" { guard let invoiceTmp = inputType["invoice"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "invoice", typeName: "InputType")) } let _invoice = try asLnInvoice(lnInvoice: invoiceTmp) return InputType.bolt11(invoice: _invoice) } if type == "nodeId" { guard let _nodeId = inputType["nodeId"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "nodeId", typeName: "InputType")) } return InputType.nodeId(nodeId: _nodeId) } if type == "url" { guard let _url = inputType["url"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "url", typeName: "InputType")) } return InputType.url(url: _url) } if type == "lnUrlPay" { guard let dataTmp = inputType["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) } let _data = try asLnUrlPayRequestData(lnUrlPayRequestData: dataTmp) return InputType.lnUrlPay(data: _data) } if type == "lnUrlWithdraw" { guard let dataTmp = inputType["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) } let _data = try asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: dataTmp) return InputType.lnUrlWithdraw(data: _data) } if type == "lnUrlAuth" { guard let dataTmp = inputType["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) } let _data = try asLnUrlAuthRequestData(lnUrlAuthRequestData: dataTmp) return InputType.lnUrlAuth(data: _data) } if type == "lnUrlError" { guard let dataTmp = inputType["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "InputType")) } let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) return InputType.lnUrlError(data: _data) } throw SdkError.Generic(message: "Unexpected type \(type) for enum InputType") } static func dictionaryOf(inputType: InputType) -> [String: Any?] { switch inputType { case let .bitcoinAddress( address ): return [ "type": "bitcoinAddress", "address": dictionaryOf(bitcoinAddressData: address), ] case let .liquidAddress( address ): return [ "type": "liquidAddress", "address": dictionaryOf(liquidAddressData: address), ] case let .bolt11( invoice ): return [ "type": "bolt11", "invoice": dictionaryOf(lnInvoice: invoice), ] case let .nodeId( nodeId ): return [ "type": "nodeId", "nodeId": nodeId, ] case let .url( url ): return [ "type": "url", "url": url, ] case let .lnUrlPay( data ): return [ "type": "lnUrlPay", "data": dictionaryOf(lnUrlPayRequestData: data), ] case let .lnUrlWithdraw( data ): return [ "type": "lnUrlWithdraw", "data": dictionaryOf(lnUrlWithdrawRequestData: data), ] case let .lnUrlAuth( data ): return [ "type": "lnUrlAuth", "data": dictionaryOf(lnUrlAuthRequestData: data), ] case let .lnUrlError( data ): return [ "type": "lnUrlError", "data": dictionaryOf(lnUrlErrorData: data), ] } } static func arrayOf(inputTypeList: [InputType]) -> [Any] { return inputTypeList.map { v -> [String: Any?] in return dictionaryOf(inputType: v) } } static func asInputTypeList(arr: [Any]) throws -> [InputType] { var list = [InputType]() for value in arr { if let val = value as? [String: Any?] { var inputType = try asInputType(inputType: val) list.append(inputType) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "InputType")) } } return list } static func asLiquidNetwork(liquidNetwork: String) throws -> LiquidNetwork { switch liquidNetwork { case "mainnet": return LiquidNetwork.mainnet case "testnet": return LiquidNetwork.testnet default: throw SdkError.Generic(message: "Invalid variant \(liquidNetwork) for enum LiquidNetwork") } } static func valueOf(liquidNetwork: LiquidNetwork) -> String { switch liquidNetwork { case .mainnet: return "mainnet" case .testnet: return "testnet" } } static func arrayOf(liquidNetworkList: [LiquidNetwork]) -> [String] { return liquidNetworkList.map { v -> String in return valueOf(liquidNetwork: v) } } static func asLiquidNetworkList(arr: [Any]) throws -> [LiquidNetwork] { var list = [LiquidNetwork]() for value in arr { if let val = value as? String { var liquidNetwork = try asLiquidNetwork(liquidNetwork: val) list.append(liquidNetwork) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LiquidNetwork")) } } return list } static func asLnUrlCallbackStatus(lnUrlCallbackStatus: [String: Any?]) throws -> LnUrlCallbackStatus { let type = lnUrlCallbackStatus["type"] as! String if type == "ok" { return LnUrlCallbackStatus.ok } if type == "errorStatus" { guard let dataTmp = lnUrlCallbackStatus["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlCallbackStatus")) } let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) return LnUrlCallbackStatus.errorStatus(data: _data) } throw SdkError.Generic(message: "Unexpected type \(type) for enum LnUrlCallbackStatus") } static func dictionaryOf(lnUrlCallbackStatus: LnUrlCallbackStatus) -> [String: Any?] { switch lnUrlCallbackStatus { case .ok: return [ "type": "ok", ] case let .errorStatus( data ): return [ "type": "errorStatus", "data": dictionaryOf(lnUrlErrorData: data), ] } } static func arrayOf(lnUrlCallbackStatusList: [LnUrlCallbackStatus]) -> [Any] { return lnUrlCallbackStatusList.map { v -> [String: Any?] in return dictionaryOf(lnUrlCallbackStatus: v) } } static func asLnUrlCallbackStatusList(arr: [Any]) throws -> [LnUrlCallbackStatus] { var list = [LnUrlCallbackStatus]() for value in arr { if let val = value as? [String: Any?] { var lnUrlCallbackStatus = try asLnUrlCallbackStatus(lnUrlCallbackStatus: val) list.append(lnUrlCallbackStatus) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlCallbackStatus")) } } return list } static func asLnUrlPayResult(lnUrlPayResult: [String: Any?]) throws -> LnUrlPayResult { let type = lnUrlPayResult["type"] as! String if type == "endpointSuccess" { guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) } let _data = try asLnUrlPaySuccessData(lnUrlPaySuccessData: dataTmp) return LnUrlPayResult.endpointSuccess(data: _data) } if type == "endpointError" { guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) } let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) return LnUrlPayResult.endpointError(data: _data) } if type == "payError" { guard let dataTmp = lnUrlPayResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlPayResult")) } let _data = try asLnUrlPayErrorData(lnUrlPayErrorData: dataTmp) return LnUrlPayResult.payError(data: _data) } throw SdkError.Generic(message: "Unexpected type \(type) for enum LnUrlPayResult") } static func dictionaryOf(lnUrlPayResult: LnUrlPayResult) -> [String: Any?] { switch lnUrlPayResult { case let .endpointSuccess( data ): return [ "type": "endpointSuccess", "data": dictionaryOf(lnUrlPaySuccessData: data), ] case let .endpointError( data ): return [ "type": "endpointError", "data": dictionaryOf(lnUrlErrorData: data), ] case let .payError( data ): return [ "type": "payError", "data": dictionaryOf(lnUrlPayErrorData: data), ] } } static func arrayOf(lnUrlPayResultList: [LnUrlPayResult]) -> [Any] { return lnUrlPayResultList.map { v -> [String: Any?] in return dictionaryOf(lnUrlPayResult: v) } } static func asLnUrlPayResultList(arr: [Any]) throws -> [LnUrlPayResult] { var list = [LnUrlPayResult]() for value in arr { if let val = value as? [String: Any?] { var lnUrlPayResult = try asLnUrlPayResult(lnUrlPayResult: val) list.append(lnUrlPayResult) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlPayResult")) } } return list } static func asLnUrlWithdrawResult(lnUrlWithdrawResult: [String: Any?]) throws -> LnUrlWithdrawResult { let type = lnUrlWithdrawResult["type"] as! String if type == "ok" { guard let dataTmp = lnUrlWithdrawResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawResult")) } let _data = try asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: dataTmp) return LnUrlWithdrawResult.ok(data: _data) } if type == "timeout" { guard let dataTmp = lnUrlWithdrawResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawResult")) } let _data = try asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: dataTmp) return LnUrlWithdrawResult.timeout(data: _data) } if type == "errorStatus" { guard let dataTmp = lnUrlWithdrawResult["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "LnUrlWithdrawResult")) } let _data = try asLnUrlErrorData(lnUrlErrorData: dataTmp) return LnUrlWithdrawResult.errorStatus(data: _data) } throw SdkError.Generic(message: "Unexpected type \(type) for enum LnUrlWithdrawResult") } static func dictionaryOf(lnUrlWithdrawResult: LnUrlWithdrawResult) -> [String: Any?] { switch lnUrlWithdrawResult { case let .ok( data ): return [ "type": "ok", "data": dictionaryOf(lnUrlWithdrawSuccessData: data), ] case let .timeout( data ): return [ "type": "timeout", "data": dictionaryOf(lnUrlWithdrawSuccessData: data), ] case let .errorStatus( data ): return [ "type": "errorStatus", "data": dictionaryOf(lnUrlErrorData: data), ] } } static func arrayOf(lnUrlWithdrawResultList: [LnUrlWithdrawResult]) -> [Any] { return lnUrlWithdrawResultList.map { v -> [String: Any?] in return dictionaryOf(lnUrlWithdrawResult: v) } } static func asLnUrlWithdrawResultList(arr: [Any]) throws -> [LnUrlWithdrawResult] { var list = [LnUrlWithdrawResult]() for value in arr { if let val = value as? [String: Any?] { var lnUrlWithdrawResult = try asLnUrlWithdrawResult(lnUrlWithdrawResult: val) list.append(lnUrlWithdrawResult) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "LnUrlWithdrawResult")) } } return list } static func asNetwork(network: String) throws -> Network { switch network { case "bitcoin": return Network.bitcoin case "testnet": return Network.testnet case "signet": return Network.signet case "regtest": return Network.regtest default: throw SdkError.Generic(message: "Invalid variant \(network) for enum Network") } } static func valueOf(network: Network) -> String { switch network { case .bitcoin: return "bitcoin" case .testnet: return "testnet" case .signet: return "signet" case .regtest: return "regtest" } } static func arrayOf(networkList: [Network]) -> [String] { return networkList.map { v -> String in return valueOf(network: v) } } static func asNetworkList(arr: [Any]) throws -> [Network] { var list = [Network]() for value in arr { if let val = value as? String { var network = try asNetwork(network: val) list.append(network) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "Network")) } } return list } static func asPaymentDetails(paymentDetails: [String: Any?]) throws -> PaymentDetails { let type = paymentDetails["type"] as! String if type == "lightning" { guard let _swapId = paymentDetails["swapId"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "swapId", typeName: "PaymentDetails")) } guard let _description = paymentDetails["description"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "PaymentDetails")) } let _preimage = paymentDetails["preimage"] as? String let _bolt11 = paymentDetails["bolt11"] as? String let _refundTxId = paymentDetails["refundTxId"] as? String let _refundTxAmountSat = paymentDetails["refundTxAmountSat"] as? UInt64 return PaymentDetails.lightning(swapId: _swapId, description: _description, preimage: _preimage, bolt11: _bolt11, refundTxId: _refundTxId, refundTxAmountSat: _refundTxAmountSat) } if type == "liquid" { guard let _destination = paymentDetails["destination"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "destination", typeName: "PaymentDetails")) } guard let _description = paymentDetails["description"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "PaymentDetails")) } return PaymentDetails.liquid(destination: _destination, description: _description) } if type == "bitcoin" { guard let _swapId = paymentDetails["swapId"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "swapId", typeName: "PaymentDetails")) } guard let _description = paymentDetails["description"] as? String else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "description", typeName: "PaymentDetails")) } let _refundTxId = paymentDetails["refundTxId"] as? String let _refundTxAmountSat = paymentDetails["refundTxAmountSat"] as? UInt64 return PaymentDetails.bitcoin(swapId: _swapId, description: _description, refundTxId: _refundTxId, refundTxAmountSat: _refundTxAmountSat) } throw SdkError.Generic(message: "Unexpected type \(type) for enum PaymentDetails") } static func dictionaryOf(paymentDetails: PaymentDetails) -> [String: Any?] { switch paymentDetails { case let .lightning( swapId, description, preimage, bolt11, refundTxId, refundTxAmountSat ): return [ "type": "lightning", "swapId": swapId, "description": description, "preimage": preimage == nil ? nil : preimage, "bolt11": bolt11 == nil ? nil : bolt11, "refundTxId": refundTxId == nil ? nil : refundTxId, "refundTxAmountSat": refundTxAmountSat == nil ? nil : refundTxAmountSat, ] case let .liquid( destination, description ): return [ "type": "liquid", "destination": destination, "description": description, ] case let .bitcoin( swapId, description, refundTxId, refundTxAmountSat ): return [ "type": "bitcoin", "swapId": swapId, "description": description, "refundTxId": refundTxId == nil ? nil : refundTxId, "refundTxAmountSat": refundTxAmountSat == nil ? nil : refundTxAmountSat, ] } } static func arrayOf(paymentDetailsList: [PaymentDetails]) -> [Any] { return paymentDetailsList.map { v -> [String: Any?] in return dictionaryOf(paymentDetails: v) } } static func asPaymentDetailsList(arr: [Any]) throws -> [PaymentDetails] { var list = [PaymentDetails]() for value in arr { if let val = value as? [String: Any?] { var paymentDetails = try asPaymentDetails(paymentDetails: val) list.append(paymentDetails) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PaymentDetails")) } } return list } static func asPaymentMethod(paymentMethod: String) throws -> PaymentMethod { switch paymentMethod { case "lightning": return PaymentMethod.lightning case "bitcoinAddress": return PaymentMethod.bitcoinAddress case "liquidAddress": return PaymentMethod.liquidAddress default: throw SdkError.Generic(message: "Invalid variant \(paymentMethod) for enum PaymentMethod") } } static func valueOf(paymentMethod: PaymentMethod) -> String { switch paymentMethod { case .lightning: return "lightning" case .bitcoinAddress: return "bitcoinAddress" case .liquidAddress: return "liquidAddress" } } static func arrayOf(paymentMethodList: [PaymentMethod]) -> [String] { return paymentMethodList.map { v -> String in return valueOf(paymentMethod: v) } } static func asPaymentMethodList(arr: [Any]) throws -> [PaymentMethod] { var list = [PaymentMethod]() for value in arr { if let val = value as? String { var paymentMethod = try asPaymentMethod(paymentMethod: val) list.append(paymentMethod) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PaymentMethod")) } } return list } static func asPaymentState(paymentState: String) throws -> PaymentState { switch paymentState { case "created": return PaymentState.created case "pending": return PaymentState.pending case "complete": return PaymentState.complete case "failed": return PaymentState.failed case "timedOut": return PaymentState.timedOut case "refundable": return PaymentState.refundable case "refundPending": return PaymentState.refundPending default: throw SdkError.Generic(message: "Invalid variant \(paymentState) for enum PaymentState") } } static func valueOf(paymentState: PaymentState) -> String { switch paymentState { case .created: return "created" case .pending: return "pending" case .complete: return "complete" case .failed: return "failed" case .timedOut: return "timedOut" case .refundable: return "refundable" case .refundPending: return "refundPending" } } static func arrayOf(paymentStateList: [PaymentState]) -> [String] { return paymentStateList.map { v -> String in return valueOf(paymentState: v) } } static func asPaymentStateList(arr: [Any]) throws -> [PaymentState] { var list = [PaymentState]() for value in arr { if let val = value as? String { var paymentState = try asPaymentState(paymentState: val) list.append(paymentState) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PaymentState")) } } return list } static func asPaymentType(paymentType: String) throws -> PaymentType { switch paymentType { case "receive": return PaymentType.receive case "send": return PaymentType.send default: throw SdkError.Generic(message: "Invalid variant \(paymentType) for enum PaymentType") } } static func valueOf(paymentType: PaymentType) -> String { switch paymentType { case .receive: return "receive" case .send: return "send" } } static func arrayOf(paymentTypeList: [PaymentType]) -> [String] { return paymentTypeList.map { v -> String in return valueOf(paymentType: v) } } static func asPaymentTypeList(arr: [Any]) throws -> [PaymentType] { var list = [PaymentType]() for value in arr { if let val = value as? String { var paymentType = try asPaymentType(paymentType: val) list.append(paymentType) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "PaymentType")) } } return list } static func asSdkEvent(sdkEvent: [String: Any?]) throws -> SdkEvent { let type = sdkEvent["type"] as! String if type == "paymentFailed" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentFailed(details: _details) } if type == "paymentPending" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentPending(details: _details) } if type == "paymentRefunded" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentRefunded(details: _details) } if type == "paymentRefundPending" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentRefundPending(details: _details) } if type == "paymentSucceeded" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentSucceeded(details: _details) } if type == "paymentWaitingConfirmation" { guard let detailsTmp = sdkEvent["details"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "details", typeName: "SdkEvent")) } let _details = try asPayment(payment: detailsTmp) return SdkEvent.paymentWaitingConfirmation(details: _details) } if type == "synced" { return SdkEvent.synced } throw SdkError.Generic(message: "Unexpected type \(type) for enum SdkEvent") } static func dictionaryOf(sdkEvent: SdkEvent) -> [String: Any?] { switch sdkEvent { case let .paymentFailed( details ): return [ "type": "paymentFailed", "details": dictionaryOf(payment: details), ] case let .paymentPending( details ): return [ "type": "paymentPending", "details": dictionaryOf(payment: details), ] case let .paymentRefunded( details ): return [ "type": "paymentRefunded", "details": dictionaryOf(payment: details), ] case let .paymentRefundPending( details ): return [ "type": "paymentRefundPending", "details": dictionaryOf(payment: details), ] case let .paymentSucceeded( details ): return [ "type": "paymentSucceeded", "details": dictionaryOf(payment: details), ] case let .paymentWaitingConfirmation( details ): return [ "type": "paymentWaitingConfirmation", "details": dictionaryOf(payment: details), ] case .synced: return [ "type": "synced", ] } } static func arrayOf(sdkEventList: [SdkEvent]) -> [Any] { return sdkEventList.map { v -> [String: Any?] in return dictionaryOf(sdkEvent: v) } } static func asSdkEventList(arr: [Any]) throws -> [SdkEvent] { var list = [SdkEvent]() for value in arr { if let val = value as? [String: Any?] { var sdkEvent = try asSdkEvent(sdkEvent: val) list.append(sdkEvent) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "SdkEvent")) } } return list } static func asSendDestination(sendDestination: [String: Any?]) throws -> SendDestination { let type = sendDestination["type"] as! String if type == "liquidAddress" { guard let addressDataTmp = sendDestination["addressData"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "addressData", typeName: "SendDestination")) } let _addressData = try asLiquidAddressData(liquidAddressData: addressDataTmp) return SendDestination.liquidAddress(addressData: _addressData) } if type == "bolt11" { guard let invoiceTmp = sendDestination["invoice"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "invoice", typeName: "SendDestination")) } let _invoice = try asLnInvoice(lnInvoice: invoiceTmp) return SendDestination.bolt11(invoice: _invoice) } throw SdkError.Generic(message: "Unexpected type \(type) for enum SendDestination") } static func dictionaryOf(sendDestination: SendDestination) -> [String: Any?] { switch sendDestination { case let .liquidAddress( addressData ): return [ "type": "liquidAddress", "addressData": dictionaryOf(liquidAddressData: addressData), ] case let .bolt11( invoice ): return [ "type": "bolt11", "invoice": dictionaryOf(lnInvoice: invoice), ] } } static func arrayOf(sendDestinationList: [SendDestination]) -> [Any] { return sendDestinationList.map { v -> [String: Any?] in return dictionaryOf(sendDestination: v) } } static func asSendDestinationList(arr: [Any]) throws -> [SendDestination] { var list = [SendDestination]() for value in arr { if let val = value as? [String: Any?] { var sendDestination = try asSendDestination(sendDestination: val) list.append(sendDestination) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "SendDestination")) } } return list } static func asSuccessActionProcessed(successActionProcessed: [String: Any?]) throws -> SuccessActionProcessed { let type = successActionProcessed["type"] as! String if type == "aes" { guard let resultTmp = successActionProcessed["result"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "result", typeName: "SuccessActionProcessed")) } let _result = try asAesSuccessActionDataResult(aesSuccessActionDataResult: resultTmp) return SuccessActionProcessed.aes(result: _result) } if type == "message" { guard let dataTmp = successActionProcessed["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "SuccessActionProcessed")) } let _data = try asMessageSuccessActionData(messageSuccessActionData: dataTmp) return SuccessActionProcessed.message(data: _data) } if type == "url" { guard let dataTmp = successActionProcessed["data"] as? [String: Any?] else { throw SdkError.Generic(message: errMissingMandatoryField(fieldName: "data", typeName: "SuccessActionProcessed")) } let _data = try asUrlSuccessActionData(urlSuccessActionData: dataTmp) return SuccessActionProcessed.url(data: _data) } throw SdkError.Generic(message: "Unexpected type \(type) for enum SuccessActionProcessed") } static func dictionaryOf(successActionProcessed: SuccessActionProcessed) -> [String: Any?] { switch successActionProcessed { case let .aes( result ): return [ "type": "aes", "result": dictionaryOf(aesSuccessActionDataResult: result), ] case let .message( data ): return [ "type": "message", "data": dictionaryOf(messageSuccessActionData: data), ] case let .url( data ): return [ "type": "url", "data": dictionaryOf(urlSuccessActionData: data), ] } } static func arrayOf(successActionProcessedList: [SuccessActionProcessed]) -> [Any] { return successActionProcessedList.map { v -> [String: Any?] in return dictionaryOf(successActionProcessed: v) } } static func asSuccessActionProcessedList(arr: [Any]) throws -> [SuccessActionProcessed] { var list = [SuccessActionProcessed]() for value in arr { if let val = value as? [String: Any?] { var successActionProcessed = try asSuccessActionProcessed(successActionProcessed: val) list.append(successActionProcessed) } else { throw SdkError.Generic(message: errUnexpectedType(typeName: "SuccessActionProcessed")) } } return list } static func hasNonNilKey(data: [String: Any?], key: String) -> Bool { if let val = data[key] { return !(val == nil || val is NSNull) } return false } static func errMissingMandatoryField(fieldName: String, typeName: String) -> String { return "Missing mandatory field \(fieldName) for type \(typeName)" } static func errUnexpectedType(typeName: String) -> String { return "Unexpected type \(typeName)" } static func errUnexpectedValue(fieldName: String) -> String { return "Unexpected value for optional field \(fieldName)" } }