/
ProcessStream.scala
37 lines (31 loc) · 978 Bytes
/
ProcessStream.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package org.gerweck.scala.util
import java.io._
sealed abstract class ProcessStream {
type Stream <: Closeable
/** The stream number, as defined by POSIX. */
val number: Int
def of(p: Process): Stream
}
object ProcessStream {
def fromNumber(n: Int) = n match {
case 0 => StdInProcessStream
case 1 => StdOutProcessStream
case 2 => StdErrProcessStream
case n => throw new IllegalArgumentException(s"Unknown stream number: $n")
}
}
case object StdInProcessStream extends ProcessStream {
type Stream = OutputStream
final val number = 0
override def of(p: Process): OutputStream = p.getOutputStream
}
case object StdOutProcessStream extends ProcessStream {
type Stream = InputStream
final val number = 1
override def of(p: Process): InputStream = p.getInputStream
}
case object StdErrProcessStream extends ProcessStream {
type Stream = InputStream
final val number = 2
override def of(p: Process): InputStream = p.getErrorStream
}