| /* |
| * |
| * Copyright 2015 gRPC authors. |
| * |
| * 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/Foundation.h> |
| |
| /** |
| * A GRXWriteable is an object to which a sequence of values can be sent. The |
| * sequence finishes with an optional error. |
| */ |
| @protocol GRXWriteable <NSObject> |
| |
| /** Push the next value of the sequence to the receiving object. */ |
| - (void)writeValue:(id)value; |
| |
| /** |
| * Signal that the sequence is completed, or that an error ocurred. After this |
| * message is sent to the instance, neither it nor writeValue: may be |
| * called again. |
| */ |
| - (void)writesFinishedWithError:(NSError *)errorOrNil; |
| @end |
| |
| typedef void (^GRXValueHandler)(id value); |
| typedef void (^GRXCompletionHandler)(NSError *errorOrNil); |
| typedef void (^GRXSingleHandler)(id value, NSError *errorOrNil); |
| typedef void (^GRXEventHandler)(BOOL done, id value, NSError *error); |
| |
| /** |
| * Utility to create objects that conform to the GRXWriteable protocol, from |
| * blocks that handle each of the two methods of the protocol. |
| */ |
| @interface GRXWriteable : NSObject<GRXWriteable> |
| |
| + (instancetype)writeableWithSingleHandler:(GRXSingleHandler)handler; |
| + (instancetype)writeableWithEventHandler:(GRXEventHandler)handler; |
| |
| - (instancetype)initWithValueHandler:(GRXValueHandler)valueHandler |
| completionHandler:(GRXCompletionHandler)completionHandler |
| NS_DESIGNATED_INITIALIZER; |
| @end |