jellyflood/Shared/Extensions/BoxedPublished.swift

34 lines
783 B
Swift

//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2025 Jellyfin & Jellyfin Contributors
//
import SwiftUI
@propertyWrapper
struct BoxedPublished<Value>: DynamicProperty {
@StateObject
var storage: PublishedBox<Value>
init(wrappedValue: Value) {
self._storage = StateObject(wrappedValue: PublishedBox(initialValue: wrappedValue))
}
var wrappedValue: Value {
get { storage.value }
nonmutating set { storage.value = newValue }
}
var projectedValue: Published<Value>.Publisher {
storage.$value
}
var box: PublishedBox<Value> {
storage
}
}