Skip to content

Commit 34ca0fa

Browse files
committed
Break serialize package up into multiple source files
1 parent ed03aef commit 34ca0fa

File tree

6 files changed

+138
-134
lines changed

6 files changed

+138
-134
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.geoscript.serialize
2+
3+
4+
trait Decoder[+T] {
5+
def decode[U : Decodable](source: U): T =
6+
implicitly[Decodable[U]].decode(source)(decodeFrom(_))
7+
def decodeFrom(source: java.io.InputStream): T
8+
}
9+
10+
trait Encoder[-T] {
11+
def buffer(t: T): Array[Byte] = encode(t, ())(Encodable.encodeBytes)
12+
13+
def format(t: T): String = new String(buffer(t))
14+
15+
def encode[Spec, Out](t: T, spec: Spec)(implicit encodable: Encodable[Spec, Out]): Out =
16+
implicitly[Encodable[Spec, Out]].encode(spec)(encodeTo(_, t))
17+
18+
def encodeTo(sink: java.io.OutputStream, t: T): Unit
19+
}
20+
21+
trait Codec[T] extends Encoder[T] with Decoder[T]
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.geoscript.serialize
2+
3+
trait Decodable[T] {
4+
def decode[U](t: T)(op: java.io.InputStream => U): U
5+
}
6+
7+
object Decodable {
8+
implicit object decodeDecoder extends Decodable[java.io.InputStream] {
9+
def decode[T](in: java.io.InputStream)(f: java.io.InputStream => T): T = f(in)
10+
}
11+
12+
implicit object decodeFile extends Decodable[java.io.File] {
13+
def decode[T](file: java.io.File)(f: java.io.InputStream => T): T = {
14+
val in = new java.io.BufferedInputStream(new java.io.FileInputStream(file))
15+
try
16+
f(in)
17+
finally
18+
in.close()
19+
}
20+
}
21+
22+
implicit object decodeString extends Decodable[Array[Byte]] {
23+
def decode[T](bs: Array[Byte])(f: java.io.InputStream => T): T = {
24+
val in = new java.io.ByteArrayInputStream(bs)
25+
try
26+
f(in)
27+
finally
28+
in.close()
29+
}
30+
}
31+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.geoscript.serialize
2+
3+
trait Encodable[Spec, Out] {
4+
def encode(spec: Spec)(op: java.io.OutputStream => Unit): Out
5+
}
6+
7+
object Encodable {
8+
implicit object encodeOutputStream extends Encodable[java.io.OutputStream, Unit] {
9+
def encode(spec: java.io.OutputStream)(op: java.io.OutputStream => Unit): Unit = op(spec)
10+
}
11+
12+
implicit object encodeBytes extends Encodable[Unit, Array[Byte]] {
13+
def encode(spec: Unit)(op: java.io.OutputStream => Unit): Array[Byte] = {
14+
val buff = new java.io.ByteArrayOutputStream
15+
try {
16+
op(buff)
17+
buff.toByteArray
18+
} finally
19+
buff.close()
20+
}
21+
}
22+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.geoscript.serialize
2+
3+
trait Readable[T] {
4+
def read[U](t: T)(op: java.io.Reader => U): U
5+
}
6+
7+
object Readable {
8+
implicit object readReader extends Readable[java.io.Reader] {
9+
def read[T](in: java.io.Reader)(f: java.io.Reader => T): T = f(in)
10+
}
11+
12+
implicit object readFile extends Readable[java.io.File] {
13+
def read[T](file: java.io.File)(f: java.io.Reader => T): T = {
14+
val in = new java.io.BufferedReader(new java.io.FileReader(file))
15+
try
16+
f(in)
17+
finally
18+
in.close()
19+
}
20+
}
21+
22+
implicit object readString extends Readable[String] {
23+
def read[T](s: String)(f: java.io.Reader => T): T = {
24+
val in = new java.io.StringReader(s)
25+
try
26+
f(in)
27+
finally
28+
in.close()
29+
}
30+
}
31+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.geoscript.serialize
2+
3+
trait Writable[Spec, Out] {
4+
def write(spec: Spec)(op: java.io.Writer => Unit): Out
5+
}
6+
7+
object Writable {
8+
implicit object writeWriter extends Writable[java.io.Writer, Unit] {
9+
def write(spec: java.io.Writer)(op: java.io.Writer => Unit): Unit = op(spec)
10+
}
11+
12+
implicit object writeFile extends Writable[java.io.File, Unit] {
13+
def write(spec: java.io.File)(op: java.io.Writer => Unit): Unit = {
14+
val writer = new java.io.FileWriter(spec)
15+
try
16+
op(writer)
17+
finally
18+
writer.close()
19+
}
20+
}
21+
22+
implicit object writeString extends Writable[Unit, String] {
23+
def write(spec: Unit)(op: java.io.Writer => Unit): String = {
24+
val writer = new java.io.StringWriter
25+
try {
26+
op(writer)
27+
writer.toString
28+
} finally {
29+
writer.close()
30+
}
31+
}
32+
}
33+
}
Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.geoscript.serialize
22

3-
import java.io.File
4-
53
trait Reader[+T] {
64
def read[U : Readable](source: U): T =
75
implicitly[Readable[U]].read(source)(readFrom(_))
@@ -18,135 +16,3 @@ trait Writer[-T] {
1816
}
1917

2018
trait Format[T] extends Reader[T] with Writer[T]
21-
22-
trait Readable[T] {
23-
def read[U](t: T)(op: java.io.Reader => U): U
24-
}
25-
26-
trait Writable[Spec, Out] {
27-
def write(spec: Spec)(op: java.io.Writer => Unit): Out
28-
}
29-
30-
object Writable {
31-
implicit object writeWriter extends Writable[java.io.Writer, Unit] {
32-
def write(spec: java.io.Writer)(op: java.io.Writer => Unit): Unit = op(spec)
33-
}
34-
35-
implicit object writeFile extends Writable[File, Unit] {
36-
def write(spec: File)(op: java.io.Writer => Unit): Unit = {
37-
val writer = new java.io.FileWriter(spec)
38-
try
39-
op(writer)
40-
finally
41-
writer.close()
42-
}
43-
}
44-
45-
implicit object writeString extends Writable[Unit, String] {
46-
def write(spec: Unit)(op: java.io.Writer => Unit): String = {
47-
val writer = new java.io.StringWriter
48-
try {
49-
op(writer)
50-
writer.toString
51-
} finally {
52-
writer.close()
53-
}
54-
}
55-
}
56-
}
57-
58-
object Readable {
59-
implicit object readReader extends Readable[java.io.Reader] {
60-
def read[T](in: java.io.Reader)(f: java.io.Reader => T): T = f(in)
61-
}
62-
63-
implicit object readFile extends Readable[File] {
64-
def read[T](file: File)(f: java.io.Reader => T): T = {
65-
val in = new java.io.BufferedReader(new java.io.FileReader(file))
66-
try
67-
f(in)
68-
finally
69-
in.close()
70-
}
71-
}
72-
73-
implicit object readString extends Readable[String] {
74-
def read[T](s: String)(f: java.io.Reader => T): T = {
75-
val in = new java.io.StringReader(s)
76-
try
77-
f(in)
78-
finally
79-
in.close()
80-
}
81-
}
82-
}
83-
84-
trait Decoder[+T] {
85-
def decode[U : Decodable](source: U): T =
86-
implicitly[Decodable[U]].decode(source)(decodeFrom(_))
87-
def decodeFrom(source: java.io.InputStream): T
88-
}
89-
90-
trait Encoder[-T] {
91-
def buffer(t: T): Array[Byte] = encode(t, ())(Encodable.encodeBytes)
92-
93-
def format(t: T): String = new String(buffer(t))
94-
95-
def encode[Spec, Out](t: T, spec: Spec)(implicit encodable: Encodable[Spec, Out]): Out =
96-
implicitly[Encodable[Spec, Out]].encode(spec)(encodeTo(_, t))
97-
98-
def encodeTo(sink: java.io.OutputStream, t: T): Unit
99-
}
100-
101-
trait Codec[T] extends Encoder[T] with Decoder[T]
102-
103-
trait Decodable[T] {
104-
def decode[U](t: T)(op: java.io.InputStream => U): U
105-
}
106-
107-
trait Encodable[Spec, Out] {
108-
def encode(spec: Spec)(op: java.io.OutputStream => Unit): Out
109-
}
110-
111-
object Encodable {
112-
implicit object encodeOutputStream extends Encodable[java.io.OutputStream, Unit] {
113-
def encode(spec: java.io.OutputStream)(op: java.io.OutputStream => Unit): Unit = op(spec)
114-
}
115-
116-
implicit object encodeBytes extends Encodable[Unit, Array[Byte]] {
117-
def encode(spec: Unit)(op: java.io.OutputStream => Unit): Array[Byte] = {
118-
val buff = new java.io.ByteArrayOutputStream
119-
try {
120-
op(buff)
121-
buff.toByteArray
122-
} finally
123-
buff.close()
124-
}
125-
}
126-
}
127-
128-
object Decodable {
129-
implicit object decodeDecoder extends Decodable[java.io.InputStream] {
130-
def decode[T](in: java.io.InputStream)(f: java.io.InputStream => T): T = f(in)
131-
}
132-
133-
implicit object decodeFile extends Decodable[File] {
134-
def decode[T](file: File)(f: java.io.InputStream => T): T = {
135-
val in = new java.io.BufferedInputStream(new java.io.FileInputStream(file))
136-
try
137-
f(in)
138-
finally
139-
in.close()
140-
}
141-
}
142-
143-
implicit object decodeString extends Decodable[Array[Byte]] {
144-
def decode[T](bs: Array[Byte])(f: java.io.InputStream => T): T = {
145-
val in = new java.io.ByteArrayInputStream(bs)
146-
try
147-
f(in)
148-
finally
149-
in.close()
150-
}
151-
}
152-
}

0 commit comments

Comments
 (0)