Sources/Compose/State/Persistence/Persistence.swift

Summary

Maintainability
A
0 mins
Test Coverage
import Foundation

public struct Persistence<State : Codable> {
    
    private unowned let storage : AnyPersistentStorage
    
    private let getState : () -> State
    private let setState : (State) -> Void
    
    init(storage : AnyPersistentStorage, get : @escaping () -> State, set : @escaping (State) -> Void) {
        self.storage = storage
        self.getState = get
        self.setState = set
    }
    
    public func save() {
        storage.save(state: getState())
    }
    
    public func restore() {
        if let state : State = storage.restore() {
            setState(state)
        }
    }
    
    public func purge() {
        storage.purge()
    }
    
}