From 0b254c4446482aba098884790ac2e2e8c8b7fc26 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 23 Aug 2022 00:13:11 +0100 Subject: [PATCH] Add Stored utility --- Sources/XXMessengerClient/Utils/Stored.swift | 41 +++++++++++++++++++ .../Messenger/Utils/StoredTests.swift | 18 ++++++++ 2 files changed, 59 insertions(+) create mode 100644 Sources/XXMessengerClient/Utils/Stored.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Utils/StoredTests.swift diff --git a/Sources/XXMessengerClient/Utils/Stored.swift b/Sources/XXMessengerClient/Utils/Stored.swift new file mode 100644 index 00000000..56b5e97e --- /dev/null +++ b/Sources/XXMessengerClient/Utils/Stored.swift @@ -0,0 +1,41 @@ +import XCTestDynamicOverlay + +public struct Stored<Value> { + public var get: () -> Value + public var set: (Value) -> Void + + public func callAsFunction() -> Value { + get() + } +} + +extension Stored { + public static func inMemory(_ value: Value) -> Stored<Value> { + let memory = Memory(value) + return Stored( + get: { memory.value }, + set: { memory.value = $0 } + ) + } + + public static func inMemory<V>() -> Stored<Optional<V>> where Value == Optional<V> { + inMemory(nil) + } +} + +private final class Memory<Value> { + init(_ value: Value) { + self.value = value + } + + var value: Value +} + +extension Stored { + public static func unimplemented() -> Stored<Value> { + Stored<Value>( + get: XCTUnimplemented("\(Self.self).get"), + set: XCTUnimplemented("\(Self.self).set") + ) + } +} diff --git a/Tests/XXMessengerClientTests/Messenger/Utils/StoredTests.swift b/Tests/XXMessengerClientTests/Messenger/Utils/StoredTests.swift new file mode 100644 index 00000000..154f6196 --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Utils/StoredTests.swift @@ -0,0 +1,18 @@ +import XCTest +@testable import XXMessengerClient + +final class StoredTests: XCTestCase { + func testInMemory() throws { + let stored: Stored<String?> = .inMemory() + + XCTAssertNil(stored()) + + stored.set("test") + + XCTAssertEqual(stored(), "test") + + stored.set(nil) + + XCTAssertNil(stored()) + } +} -- GitLab