41 lines
1.1 KiB
Swift
41 lines
1.1 KiB
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import Foundation
|
|
import Vapor
|
|
|
|
extension DependencyValues {
|
|
public var fileClient: FileClient {
|
|
get { self[FileClient.self] }
|
|
set { self[FileClient.self] = newValue }
|
|
}
|
|
}
|
|
|
|
@DependencyClient
|
|
public struct FileClient: Sendable {
|
|
public typealias OnCompleteHandler = @Sendable () async throws -> Void
|
|
|
|
public var writeFile: @Sendable (String, String) async throws -> Void
|
|
public var removeFile: @Sendable (String) async throws -> Void
|
|
public var streamFile: @Sendable (String, @escaping OnCompleteHandler) async throws -> Response
|
|
}
|
|
|
|
extension FileClient: TestDependencyKey {
|
|
public static let testValue = Self()
|
|
|
|
public static func live(fileIO: FileIO) -> Self {
|
|
.init(
|
|
writeFile: { contents, path in
|
|
try await fileIO.writeFile(ByteBuffer(string: contents), at: path)
|
|
},
|
|
removeFile: { path in
|
|
try FileManager.default.removeItem(atPath: path)
|
|
},
|
|
streamFile: { path, onComplete in
|
|
try await fileIO.asyncStreamFile(at: path) { _ in
|
|
try await onComplete()
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|