AutoCat/AutoCatCore/Models/VehiclesArchive.swift

67 lines
1.5 KiB
Swift

//
// VehiclesArchive.swift
// AutoCatCore
//
// Created by Selim Mustafaev on 19.01.2025.
// Copyright © 2025 Selim Mustafaev. All rights reserved.
//
import SwiftUI
public enum VehiclesArchiveError: LocalizedError {
case filedCreateCsv
public var errorDescription: String? {
switch self {
case .filedCreateCsv: "Failed to create csv data for vehicles"
}
}
}
public final class VehiclesArchive {
let vehicles: [VehicleDto]
public init(vehiles: [VehicleDto]) {
self.vehicles = vehiles
}
func makeCsvString() throws -> String {
var result = ""
let newLine: Character = "\r\n"
result.append(VehicleDto.csvHeader)
result.append(newLine)
for vehicle in vehicles {
result.append(vehicle.csvLine)
result.append(newLine)
}
return result
}
}
extension VehiclesArchive: Transferable {
public static var fileName: String {
"autocat.csv"
}
public static var transferRepresentation: some TransferRepresentation {
DataRepresentation(exportedContentType: .commaSeparatedText) { archive in
let csvString = try archive.makeCsvString()
if let data = csvString.data(using: .utf8){
return data
} else {
throw VehiclesArchiveError.filedCreateCsv
}
}
.suggestedFileName(fileName)
}
}