1 /*
2  * hunt-amqp-client: AMQP Client Library for D Programming Language. Support for RabbitMQ and other AMQP Server.
3  *
4  * Copyright (C) 2018-2019 HuntLabs
5  *
6  * Website: https://www.huntlabs.net
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 
12 module hunt.amqp.client.WriteStream;
13 
14 import hunt.amqp.client.StreamBase;
15 import hunt.amqp.Handler;
16 import hunt.Object;
17 import hunt.Exceptions;
18 
19 interface  WriteStream(T) : StreamBase {
20 
21  WriteStream!T exceptionHandler(Handler!Throwable var1);
22 
23    // Future<Void> write(T var1);
24 
25     void write(T var1, Handler!Void var2);
26 
27     //default Future<Void> end() {
28     //    Promise<Void> promise = Promise.promise();
29     //    this.end((Handler)promise);
30     //    return promise.future();
31     //}
32 
33     void end(Handler!Void var1);
34 
35     //default Future<Void> end(T data) {
36     //    Promise<Void> provide = Promise.promise();
37     //    this.end(data, provide);
38     //    return provide.future();
39     //}
40 
41     final void end(T data, Handler!Void handler) {
42         if (handler !is null)
43         {
44             this.write(data, new class Handler!Void {
45                 void handle(Void var1)
46                 {
47                     if(var1 !is null)
48                     {
49                         end(handler);
50                     }else
51                     {
52                          handler.handle(var1);
53                     }
54                 }
55 
56             });
57             //this.write(data, (ar) -> {
58             //    if (ar.succeeded()) {
59             //        this.end(handler);
60             //    } else {
61             //        handler.handle(ar);
62             //    }
63             //
64             //});
65         } else {
66            // end(data);
67             implementationMissing(false);
68         }
69     }
70 
71     WriteStream!T setWriteQueueMaxSize(int var1);
72 
73     bool writeQueueFull();
74 
75     WriteStream!T drainHandler(Handler!Void var1);
76 
77 }
78