54 lines
1.8 KiB
Swift
54 lines
1.8 KiB
Swift
import Foundation
|
||
|
||
/// Сводка по торговой паре из `GET /market/symbol-thumb`.
|
||
///
|
||
/// Нюанс нейминга: API Rapira меняет местами base и quote относительно
|
||
/// привычной терминологии — для пары "BTC/USDT" `quoteCurrency == "BTC"`
|
||
/// (монета), а `baseCurrency == "USDT"` (валюта, в которой выражена цена).
|
||
struct SymbolThumb: Codable, Identifiable, Sendable {
|
||
var id: String { symbol }
|
||
|
||
let symbol: String
|
||
let open: Double
|
||
let high: Double
|
||
let low: Double
|
||
let close: Double
|
||
/// Относительное изменение за 24ч (0.0234 == +2.34%).
|
||
let chg: Double
|
||
/// Абсолютное изменение за 24ч в валюте цены.
|
||
let change: Double
|
||
let volume: Double
|
||
let turnover: Double
|
||
let quoteCurrencyName: String
|
||
let baseCurrency: String
|
||
let quoteCurrency: String
|
||
}
|
||
|
||
// MARK: - Представление
|
||
|
||
extension SymbolThumb {
|
||
var isPositive: Bool { chg >= 0 }
|
||
|
||
/// «70 324,00»
|
||
var priceFormatted: String { MarketFormatting.price(close) }
|
||
|
||
/// «+2.34%»
|
||
var changePercent: String { MarketFormatting.percent(chg, signed: true) }
|
||
|
||
/// «2.34%» — без знака, когда знак уже несёт соседнее значение.
|
||
var changePercentPlain: String { MarketFormatting.percent(abs(chg), signed: false) }
|
||
|
||
/// «+1 676,00 USDT»
|
||
var changeFormatted: String { "\(MarketFormatting.signedAmount(change)) \(baseSymbol)" }
|
||
|
||
/// Символ валюты цены: ₽ вместо RUB и т.п.
|
||
var baseSymbol: String {
|
||
switch baseCurrency {
|
||
case "RUB": "₽"
|
||
case "USD": "$"
|
||
case "EUR": "€"
|
||
default: baseCurrency
|
||
}
|
||
}
|
||
}
|