TM-SGNL-iOS/SignalServiceKit/Util/ThreadBacked.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

34 lines
839 B
Swift

//
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
// Thread local
@propertyWrapper
public struct ThreadBacked<Value> {
private let key: String
private let defaultValue: Value
public init(key: String, defaultValue: Value) {
self.key = key
self.defaultValue = defaultValue
}
public var wrappedValue: Value {
get {
guard let value = Thread.current.threadDictionary[key] else {
return defaultValue
}
guard let value = value as? Value else {
owsFailDebug("Unexpected value: \(type(of: value))")
return defaultValue
}
return value
}
set {
Thread.current.threadDictionary[key] = newValue
}
}
}