1 /*
2 * Hunt - A refined core library for D programming language.
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.stream.PipedStream;
13
14 import hunt.stream.Common;
15 import hunt.stream.ByteArrayInputStream;
16 import hunt.stream.ByteArrayOutputStream;
17 import hunt.stream.BufferedInputStream;
18 import hunt.stream.BufferedOutputStream;
19 import hunt.stream.FileInputStream;
20 import hunt.stream.FileOutputStream;
21 import hunt.util.Common;
22
23 // import hunt.logging;
24
25 import std.path;
26 import std.file;
27
28 interface PipedStream : Closeable {
29
30 InputStream getInputStream();
31
32 OutputStream getOutputStream();
33 }
34
35 /**
36 */
37 class ByteArrayPipedStream : PipedStream {
38
39 private ByteArrayOutputStream outStream;
40 // private ByteArrayInputStream inStream;
41 private int size;
42
43 this(int size) {
44 this.size = size;
45 }
46
47 void close() {
48 // inStream = null;
49 outStream = null;
50 }
51
52 ByteArrayInputStream getInputStream() {
53 return new ByteArrayInputStream(getOutputStream().toByteArray());
54 // if (inStream is null) {
55 // inStream = new ByteArrayInputStream(outStream.toByteArray());
56 // // outStream = null;
57 // }
58 // return inStream;
59 }
60
61 ByteArrayOutputStream getOutputStream() {
62 if (outStream is null) {
63 outStream = new ByteArrayOutputStream(size);
64 }
65 return outStream;
66 }
67 }
68
69 /**
70 *
71 */
72 class FilePipedStream : PipedStream {
73
74 private BufferedOutputStream output;
75 // private BufferedInputStream input;
76 private string temp;
77
78 this() {
79 this(tempDir());
80 }
81
82 this(string tempdir) {
83 import std.uuid;
84 temp = tempdir ~ dirSeparator ~ "hunt-" ~ randomUUID().toString();
85 }
86
87 void close() {
88 import std.array;
89 if (temp.empty())
90 return;
91
92 try {
93 temp.remove();
94 } finally {
95 // if (input !is null)
96 // input.close();
97
98 if (output !is null)
99 output.close();
100 }
101
102 // input = null;
103 output = null;
104 temp = null;
105 }
106
107
108 BufferedInputStream getInputStream() {
109 // if (input is null) {
110 // input = new BufferedInputStream(new FileInputStream(temp));
111 // }
112 // return input;
113 return new BufferedInputStream(new FileInputStream(temp));
114 }
115
116 BufferedOutputStream getOutputStream() {
117 if (output is null) {
118 output = new BufferedOutputStream(new FileOutputStream(temp));
119 }
120 return output;
121 }
122 }
123