blob: 7fe805c6638978051a37ac3aae96a77bc7c5ab31 [file] [log] [blame]
Jorge Canizalese8304d52015-02-17 19:50:51 -08001/*
2 *
Yang Gao5fc90292015-02-20 09:46:22 -08003 * Copyright 2015, Google Inc.
Jorge Canizalese8304d52015-02-17 19:50:51 -08004 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
Jorge Canizales30697c92015-02-17 17:09:14 -080034#import <Foundation/Foundation.h>
35
Jorge Canizalesb10776c2015-10-26 10:44:55 -070036/**
37 * A GRXWriteable is an object to which a sequence of values can be sent. The
38 * sequence finishes with an optional error.
39 */
Jorge Canizales30697c92015-02-17 17:09:14 -080040@protocol GRXWriteable <NSObject>
41
Jorge Canizalesb10776c2015-10-26 10:44:55 -070042/** Push the next value of the sequence to the receiving object. */
Jorge Canizalesa90a9c32015-05-18 17:12:41 -070043- (void)writeValue:(id)value;
Jorge Canizales30697c92015-02-17 17:09:14 -080044
Jorge Canizalesb10776c2015-10-26 10:44:55 -070045/**
46 * Signal that the sequence is completed, or that an error ocurred. After this
47 * message is sent to the instance, neither it nor writeValue: may be
48 * called again.
49 */
Jorge Canizalesb2c300c2015-05-18 17:19:16 -070050- (void)writesFinishedWithError:(NSError *)errorOrNil;
Jorge Canizales30697c92015-02-17 17:09:14 -080051@end
52
53typedef void (^GRXValueHandler)(id value);
54typedef void (^GRXCompletionHandler)(NSError *errorOrNil);
Jorge Canizalesf95ddba2015-08-12 10:51:56 -070055typedef void (^GRXSingleHandler)(id value, NSError *errorOrNil);
56typedef void (^GRXEventHandler)(BOOL done, id value, NSError *error);
Jorge Canizales30697c92015-02-17 17:09:14 -080057
Jorge Canizalesb10776c2015-10-26 10:44:55 -070058/**
59 * Utility to create objects that conform to the GRXWriteable protocol, from
60 * blocks that handle each of the two methods of the protocol.
61 */
Jorge Canizales30697c92015-02-17 17:09:14 -080062@interface GRXWriteable : NSObject<GRXWriteable>
Jorge Canizales2779ccb2015-04-20 23:42:46 -070063
Jorge Canizalesf95ddba2015-08-12 10:51:56 -070064+ (instancetype)writeableWithSingleHandler:(GRXSingleHandler)handler;
65+ (instancetype)writeableWithEventHandler:(GRXEventHandler)handler;
Jorge Canizales2779ccb2015-04-20 23:42:46 -070066
Jorge Canizales30697c92015-02-17 17:09:14 -080067- (instancetype)initWithValueHandler:(GRXValueHandler)valueHandler
68 completionHandler:(GRXCompletionHandler)completionHandler
69 NS_DESIGNATED_INITIALIZER;
70@end