44import Foundation
55import Combine
66
7+ /// CombineLobster is a extension class with Combine.
8+ ///
9+ /// It allows you handle Lobster with Combine
710@available ( iOS 13 . 0 , * )
811public struct CombineLobster {
912 fileprivate let lobster : Lobster
1013}
1114
1215@available ( iOS 13 . 0 , * )
13- public extension CombineLobster {
14-
16+ extension CombineLobster {
1517 class Subscription < S: Subscriber > {
1618 var subscriber : S ?
1719 var cancellable : AnyCancellable ?
@@ -38,7 +40,7 @@ public extension CombineLobster {
3840 }
3941 }
4042
41- final class ConfigValueSubscription < S: Subscriber , T: ConfigSerializable > : Subscription < S > , Combine . Subscription where S. Input == T . Value , S. Failure == Error {
43+ final class ConfigValueSubscription < S: Subscriber , T: ConfigSerializable > : Subscription < S > , Combine . Subscription where S. Input == T . Value , S. Failure == Never {
4244 private let key : ConfigKey < T >
4345 init ( subscriber: S , lobster: Lobster , key: ConfigKey < T > ) {
4446 self . key = key
@@ -58,7 +60,7 @@ public extension CombineLobster {
5860
5961 struct ConfigValuePublisher < T: ConfigSerializable > : Combine . Publisher {
6062 public typealias Output = T . Value
61- public typealias Failure = Error
63+ public typealias Failure = Never
6264
6365 private let lobster : Lobster
6466 private let key : ConfigKey < T >
@@ -77,7 +79,7 @@ public extension CombineLobster {
7779 }
7880 }
7981
80- final class ConfigValueOptionalSubscription < S: Subscriber , T: ConfigSerializable > : Subscription < S > , Combine . Subscription where S. Input == T . Value ? , S. Failure == Error {
82+ final class ConfigValueOptionalSubscription < S: Subscriber , T: ConfigSerializable > : Subscription < S > , Combine . Subscription where S. Input == T . Value ? , S. Failure == Never {
8183 private let key : ConfigKey < T ? >
8284 init ( subscriber: S , lobster: Lobster , key: ConfigKey < T ? > ) {
8385 self . key = key
@@ -97,7 +99,7 @@ public extension CombineLobster {
9799
98100 struct ConfigValueOptionalPublisher < T: ConfigSerializable > : Combine . Publisher {
99101 public typealias Output = T . Value ?
100- public typealias Failure = Error
102+ public typealias Failure = Never
101103
102104 private let lobster : Lobster
103105 private let key : ConfigKey < T ? >
@@ -118,15 +120,21 @@ public extension CombineLobster {
118120
119121}
120122
123+ /// Extensions for Lobster
121124@available ( iOS 13 . 0 , * )
122125public extension Lobster {
126+ /// Returns `CombineLobster`.
123127 var combine : CombineLobster {
124128 CombineLobster ( lobster: self )
125129 }
126130}
127131
132+ /// Extensions for CombineLobster
128133@available ( iOS 13 . 0 , * )
129134public extension CombineLobster {
135+ /// Returns Publisher that tells you that Lobster has fetched latest valeus from RemoteConfig.
136+ ///
137+ /// - Returns: A publisher `<Void, Error>`
130138 func fetched( ) -> AnyPublisher < Void , Error > {
131139 return NotificationCenter . default. publisher ( for: Lobster . didFetchConfig)
132140 . tryMap { ( notification) in
@@ -138,12 +146,18 @@ public extension CombineLobster {
138146 . eraseToAnyPublisher ( )
139147 }
140148
141- func fetched< T: ConfigSerializable > ( _ key: ConfigKey < T > ) -> AnyPublisher < T . Value , Error > {
149+ /// Returns Publisher that gives you a value matched a config key after fetching from RemoteConfig.
150+ ///
151+ /// - Returns: A publisher `<T.Value, Error>`
152+ func fetched< T: ConfigSerializable > ( _ key: ConfigKey < T > ) -> AnyPublisher < T . Value , Never > {
142153 return ConfigValuePublisher ( lobster: lobster, key: key)
143154 . eraseToAnyPublisher ( )
144155 }
145156
146- func fetched< T: ConfigSerializable > ( _ key: ConfigKey < T ? > ) -> AnyPublisher < T . Value ? , Error > {
157+ /// Returns Publisher that gives you an optional value matched a config key after fetching from RemoteConfig.
158+ ///
159+ /// - Returns: A publisher `<T.Value?, Error>`
160+ func fetched< T: ConfigSerializable > ( _ key: ConfigKey < T ? > ) -> AnyPublisher < T . Value ? , Never > {
147161 return ConfigValueOptionalPublisher ( lobster: lobster, key: key)
148162 . eraseToAnyPublisher ( )
149163 }
0 commit comments