Files
Termind/Frameworks/TermindInfrastructure/ModelProviderServiceAccountFile.swift

23 lines
974 B
Swift

// SPDX-FileCopyrightText: 2026 Kaede Akino
// SPDX-License-Identifier: GPL-3.0-only
import Foundation
import TermindApplication
public enum ModelProviderServiceAccountFile {
public static func read(_ url: URL) async throws -> String {
try await Task.detached {
let scoped = url.startAccessingSecurityScopedResource()
defer { if scoped { url.stopAccessingSecurityScopedResource() } }
try Task.checkCancellation()
let file = try FileHandle(forReadingFrom: url)
defer { try? file.close() }
let data = try file.read(upToCount: ModelProviderServiceAccount.maximumBytes + 1) ?? Data()
guard data.count <= ModelProviderServiceAccount.maximumBytes,
let json = String(data: data, encoding: .utf8)
else { throw ModelProviderServiceAccount.ValidationError.invalid }
return try ModelProviderServiceAccount(json: json).json
}.value
}
}