67 lines
1.5 KiB
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)
|
|
}
|
|
}
|