20 lines
888 B
Swift
20 lines
888 B
Swift
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
|
|
}
|
|
}
|