// // PersistenceService.swift // // Copyright 2026 Brendan Szymanski // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // SPDX-License-Identifier: GPL-3.0-or-later // import Foundation public struct AuthData: Codable, Sendable { public let serverURL: String public let token: String public let userId: String public let username: String public init(serverURL: String, token: String, userId: String, username: String) { self.serverURL = serverURL self.token = token self.userId = userId self.username = username } } public enum PersistenceError: Error { case migrationFailed(Error) case ioFailed(Error) case encodingFailed case decodingFailed case notFound } public protocol PersistenceService: Sendable { func loadAuth() async throws -> AuthData func saveAuth(_ auth: AuthData) async throws func clearAuth() async throws func getPreference(key: String) async throws -> String? func setPreference(key: String, value: String) async throws func clearAll() async throws }