diff --git a/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift b/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift new file mode 100644 index 0000000..ba42356 --- /dev/null +++ b/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift @@ -0,0 +1,49 @@ +// +// DateAdapter.swift +// Browse +// +// Created by Javier Cicchelli on 15/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import Foundation + +struct DateAdapter { + + // MARK: Properties + + private let dateFormatter: DateFormatter = .dateTimeFormatter + + // MARK: Functions + + func callAsFunction(value: Date?) -> String { + if let value { + return dateFormatter.string(from: value) + } else { + return .Constants.noValue + } + } + +} + +// MARK: - DateFormatter+Formats + +private extension DateFormatter { + static let dateTimeFormatter = { + let formatter = DateFormatter() + + formatter.dateStyle = .long + formatter.timeStyle = .short + formatter.locale = .current + + return formatter + }() +} + +// MARK: - String+Constants + +private extension String { + enum Constants { + static let noValue = "-" + } +} diff --git a/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift b/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift new file mode 100644 index 0000000..55fa92f --- /dev/null +++ b/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift @@ -0,0 +1,54 @@ +// +// SizeAdapter.swift +// Browse +// +// Created by Javier Cicchelli on 15/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import Foundation + +struct SizeAdapter { + + // MARK: Properties + + private let measurementFormatter: MeasurementFormatter = .informationSizeFormatter + + // MARK: Functions + + func callAsFunction(value: Int?) -> String { + guard let value else { return .Constants.noValue } + + var sizeInBytes = Measurement( + value: Double(value), + unit: UnitInformationStorage.bytes + ) + + return measurementFormatter.string( + from: sizeInBytes.converted(to: .megabytes) + ) + } + +} + +// MARK: - DateFormatter+Formats + +private extension MeasurementFormatter { + static let informationSizeFormatter = { + let formatter = MeasurementFormatter() + + formatter.unitStyle = .medium + formatter.numberFormatter.maximumFractionDigits = 2 + formatter.locale = .current + + return formatter + }() +} + +// MARK: - String+Constants + +private extension String { + enum Constants { + static let noValue = "-" + } +}