TM-SGNL-iOS/SignalServiceKit/Util/Currency.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

46 lines
1.2 KiB
Swift

//
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public struct Currency {
public typealias Code = String
public struct Info {
public let code: Code
public let name: String
public init(code: Code, name: String) {
self.code = code
self.name = name
}
public init?(code: Code, ignoreMissingName: Bool = false) {
if let name = Currency.name(for: code) {
self.init(code: code, name: name)
} else if ignoreMissingName {
self.init(code: code, name: code)
} else {
return nil
}
}
}
public static func name(for code: Code) -> String? {
Locale.current.localizedString(forCurrencyCode: code)
}
public static func infos(
for codes: any Sequence<Code>,
ignoreMissingNames: Bool,
shouldSort: Bool
) -> [Info] {
#if TESTABLE_BUILD
owsPrecondition(Array(codes).count == Set(codes).count)
#endif
var infos = codes.compactMap { Info(code: $0, ignoreMissingName: ignoreMissingNames) }
if shouldSort { infos.sort { $0.name < $1.name } }
return infos
}
}