diff --git a/MobiusCore/Source/Disposables/EmptyDisposable.swift b/MobiusCore/Source/Disposables/EmptyDisposable.swift new file mode 100644 index 00000000..5ac3eeae --- /dev/null +++ b/MobiusCore/Source/Disposables/EmptyDisposable.swift @@ -0,0 +1,26 @@ +// Copyright 2019-2024 Spotify AB. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// The `EmptyDisposable` class implements a `Disposable` type for when you don't have anything to dispose of. +public final class EmptyDisposable: MobiusCore.Disposable { + + /// Create an `EmptyDisposable` + public init() {} + + public func dispose() { + // No-op + } +} diff --git a/MobiusCore/Source/EffectHandlers/EffectRouterDSL.swift b/MobiusCore/Source/EffectHandlers/EffectRouterDSL.swift index ce6998ef..26dcf3d2 100644 --- a/MobiusCore/Source/EffectHandlers/EffectRouterDSL.swift +++ b/MobiusCore/Source/EffectHandlers/EffectRouterDSL.swift @@ -42,7 +42,7 @@ public extension _PartialEffectRouter { return to { parameters, callback in fireAndForget(parameters) callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } } @@ -58,7 +58,7 @@ public extension _PartialEffectRouter { callback.send(event) } callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } } } diff --git a/MobiusCore/Source/EventSources/CompositeEventSourceBuilder.swift b/MobiusCore/Source/EventSources/CompositeEventSourceBuilder.swift index 1662deb5..0225686c 100644 --- a/MobiusCore/Source/EventSources/CompositeEventSourceBuilder.swift +++ b/MobiusCore/Source/EventSources/CompositeEventSourceBuilder.swift @@ -40,7 +40,7 @@ public struct CompositeEventSourceBuilder { public func build() -> AnyEventSource { switch eventSources.count { case 0: - return AnyEventSource { _ in AnonymousDisposable {} } + return AnyEventSource { _ in EmptyDisposable() } case 1: return eventSources[0] default: diff --git a/MobiusCore/Source/Mobius.swift b/MobiusCore/Source/Mobius.swift index 11c21af4..334f0e21 100644 --- a/MobiusCore/Source/Mobius.swift +++ b/MobiusCore/Source/Mobius.swift @@ -74,7 +74,7 @@ public enum Mobius { return Builder( update: update, effectHandler: effectHandler, - eventSource: AnyEventSource({ _ in AnonymousDisposable(disposer: {}) }), + eventSource: AnyEventSource({ _ in EmptyDisposable() }), eventConsumerTransformer: { $0 }, logger: AnyMobiusLogger(NoopLogger()) ) diff --git a/MobiusCore/Test/EffectHandlers/EffectHandlerTests.swift b/MobiusCore/Test/EffectHandlers/EffectHandlerTests.swift index a76ab783..1cc5bad6 100644 --- a/MobiusCore/Test/EffectHandlers/EffectHandlerTests.swift +++ b/MobiusCore/Test/EffectHandlers/EffectHandlerTests.swift @@ -83,5 +83,5 @@ private func handleEffect(effect: Effect, callback: EffectCallback) -> Di callback.send(.eventForEffect1) } callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } diff --git a/MobiusCore/Test/EffectHandlers/EffectRouterDSLTests.swift b/MobiusCore/Test/EffectHandlers/EffectRouterDSLTests.swift index 32ab2891..64208291 100644 --- a/MobiusCore/Test/EffectHandlers/EffectRouterDSLTests.swift +++ b/MobiusCore/Test/EffectHandlers/EffectRouterDSLTests.swift @@ -167,7 +167,7 @@ class EffectRouterDSLTests: QuickSpec { expect(effect).to(equal(.effect1)) callback.send(.eventForEffect1) callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } .asConnectable .connect { events.append($0) } diff --git a/MobiusCore/Test/EffectHandlers/EffectRouterTests.swift b/MobiusCore/Test/EffectHandlers/EffectRouterTests.swift index 4616069e..0507db80 100644 --- a/MobiusCore/Test/EffectHandlers/EffectRouterTests.swift +++ b/MobiusCore/Test/EffectHandlers/EffectRouterTests.swift @@ -98,7 +98,7 @@ class EffectRouterTests: QuickSpec { .to { _, callback in callback.send(.eventForEffect2) callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } .asConnectable @@ -119,7 +119,7 @@ class EffectRouterTests: QuickSpec { beforeEach { let handler = AnyEffectHandler { _, _ in - AnonymousDisposable {} + EmptyDisposable() } let invalidRouter = EffectRouter() .routeEffects(equalTo: .multipleHandlersForThisEffect).to(handler) @@ -163,7 +163,7 @@ class EffectRouterTests: QuickSpec { .routeEffects(equalTo: .effect2) .to { _, callback in callback.end() - return AnonymousDisposable {} + return EmptyDisposable() } .asConnectable diff --git a/MobiusCore/Test/NonReentrancyTests.swift b/MobiusCore/Test/NonReentrancyTests.swift index 4c090c8b..3f76d0a3 100644 --- a/MobiusCore/Test/NonReentrancyTests.swift +++ b/MobiusCore/Test/NonReentrancyTests.swift @@ -67,7 +67,7 @@ class NonReentrancyTests: QuickSpec { let testEffectHandler = AnyEffectHandler { handleEffect($0, $1) - return AnonymousDisposable {} + return EmptyDisposable() } let effectConnectable = EffectRouter() diff --git a/MobiusExtras/Test/EventSource+ExtensionsTests.swift b/MobiusExtras/Test/EventSource+ExtensionsTests.swift index 8b2a2e76..ebdcdf7a 100644 --- a/MobiusExtras/Test/EventSource+ExtensionsTests.swift +++ b/MobiusExtras/Test/EventSource+ExtensionsTests.swift @@ -27,7 +27,7 @@ class EventSourceExtensionsTests: QuickSpec { beforeEach { intEventSource = AnyEventSource { (consumer: @escaping (Int) -> Void) in subscribedIntConsumer = consumer - return AnonymousDisposable {} + return EmptyDisposable() } }