// // PreferenceBackend.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 import Logging import LuminateCore private let logger = Logger(label: "\(AppInfo.identifier).store") /// Opens Luminate's on-disk preference backend, degrading to memory when SQLite is unavailable. package enum PreferenceBackend { /// Opens the SQLite preference store, falling back to an in-memory store on failure. /// /// - Parameter url: The database file location. /// - Returns: A SQLite-backed store, or an `EphemeralPreferenceStore` when opening failed. package static func open(url: URL = AppPaths.preferencesDatabaseURL()) -> any PreferenceStoring { do { return try SQLitePreferenceStore(url: url) } catch { logger.error("Preferences unavailable, running without persistence", error: error) return EphemeralPreferenceStore() } } }