43 lines
1.3 KiB
Swift
43 lines
1.3 KiB
Swift
/// Implementation details of `ValueReducer`.
|
|
public protocol _ValueReducer {
|
|
/// The type of fetched database values
|
|
associatedtype Fetched
|
|
|
|
/// The type of observed values
|
|
associatedtype Value
|
|
|
|
/// Transforms a fetched value into an eventual observed value. Returns nil
|
|
/// when observer should not be notified.
|
|
///
|
|
/// This method runs in some unspecified dispatch queue.
|
|
///
|
|
/// ValueReducer semantics require that the first invocation of this
|
|
/// method returns a non-nil value:
|
|
///
|
|
/// let reducer = MyReducer()
|
|
/// reducer._value(...) // MUST NOT be nil
|
|
/// reducer._value(...) // MAY be nil
|
|
/// reducer._value(...) // MAY be nil
|
|
mutating func _value(_ fetched: Fetched) throws -> Value?
|
|
}
|
|
|
|
/// `ValueReducer` supports ``ValueObservation``.
|
|
///
|
|
/// A `ValueReducer` fetches and transforms the database values
|
|
/// observed by a ``ValueObservation``.
|
|
///
|
|
/// ## Topics
|
|
///
|
|
/// ### Support
|
|
///
|
|
/// - ``ValueReducers``
|
|
public protocol ValueReducer: _ValueReducer {
|
|
/// Fetches database values upon changes in an observed database region.
|
|
///
|
|
/// This method must does not depend on the state of the reducer.
|
|
func _fetch(_ db: Database) throws -> Fetched
|
|
}
|
|
|
|
/// A namespace for concrete types that adopt the ``ValueReducer`` protocol.
|
|
public enum ValueReducers { }
|