-
Notifications
You must be signed in to change notification settings - Fork 11
/
InDiskPersistence.swift
69 lines (69 loc) · 2.6 KB
/
InDiskPersistence.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//import Result
//import ReactiveSwift
//
//extension InDiskPersistenceHandler where T: Mappable {
//
// /// Used to load a single `Mappable` element from persistence
// public func load() -> SignalProducer<T, ReactorError> {
// return readFileData(persistenceFilePath)
// .flatMapLatest(parse)
// }
//
// /// Used to save to persistence a single `Mappable` element into persistence
// /// The model is returned back when saved.
// public func save(_ model: T) -> SignalProducer<T, ReactorError> {
//
// let writeData = curry(writeToFile)(persistenceFilePath)
//
// return encode(model)
// .flatMapLatest(writeData)
// .map { _ in model }
// }
//}
//
//extension InDiskPersistenceHandler where T: Sequence, T.Iterator.Element: Mappable {
//
// /// Used to load a Sequence of `Mappable` elements from persistence
// public func load() -> SignalProducer<T, ReactorError> {
//
// let parser: (Data) -> SignalProducer<T, ReactorError> = flip(curry(parse))(prunedArrayFromJSON)
//
// return readFileData(persistenceFilePath)
// .flatMapLatest(parser)
// }
//
// /// Used to save to persistence a Sequence of `Mappable` elements into persistence
// /// The models are returned back when saved.
// public func save(_ models: T) -> SignalProducer<T, ReactorError> {
//
// let writeData = curry(writeToFile)(persistenceFilePath)
//
// return encode(models)
// .flatMapLatest(writeData)
// .map { _ in models }
// }
//}
//
///// Used to persist a `T` in disk. The `T` or the `Sequence.Generator.Element` must be `Mappable`, in order for it work
//public final class InDiskPersistenceHandler<T> {
//
// internal let persistenceFilePath: String
// private let expirationTime: TimeInterval
//
// public init(persistenceFilePath: String, expirationTime: TimeInterval = 2) {
//
// self.persistenceFilePath = persistenceFilePath
// self.expirationTime = expirationTime
// }
//
// /// Check if a file has experied. The expiration time is based on the
// /// TimeInterval passed when the InDiskPersistenceHandler is created
// public func hasPersistenceExpired() -> SignalProducer<Bool, NoError> {
//
// let didExpire = flip(curry(didCacheExpired))(expirationTime)
// return fileCreationDate(persistenceFilePath)
// .flatMapLatest{ SignalProducer(value: $0) }
// .flatMapLatest(didExpire)
// .flatMapError{ _ in SignalProducer(value: true) }
// }
//}