spb/os-vault Public
Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.
Swift 96%
Shell 3.4%
Makefile 0.6%
1import Foundation23final actor Cache<Key: Hashable, Value> {4 private let wrapped = NSCache<WrappedKey, Entry>()56 func insert(_ value: Value, forKey key: Key) {7 let entry = Entry(value: value)8 wrapped.setObject(entry, forKey: WrappedKey(key))9 }1011 func value(forKey key: Key) -> Value? {12 let entry = wrapped.object(forKey: WrappedKey(key))13 return entry?.value14 }1516 func removeValue(forKey key: Key) {17 wrapped.removeObject(forKey: WrappedKey(key))18 }19}2021private extension Cache {22 final class WrappedKey: NSObject {23 let key: Key2425 init(_ key: Key) { self.key = key }2627 override var hash: Int { key.hashValue }2829 override func isEqual(_ object: Any?) -> Bool {30 guard let value = object as? WrappedKey else {31 return false32 }3334 return value.key == key35 }36 }37}3839private extension Cache {40 final class Entry {41 let value: Value4243 init(value: Value) {44 self.value = value45 }46 }47}4849extension Cache {50 subscript(key: Key) -> Value? {51 get { value(forKey: key) }52 set {53 guard let value = newValue else {54 // If nil was assigned using our subscript,55 // then we remove any value for that key:56 removeValue(forKey: key)57 return58 }5960 insert(value, forKey: key)61 }62 }63}64