Files
2026-08-12 07:06:01 +07:00

54 lines
1.8 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}
}
}