Skip to content

Commit 4ef88b8

Browse files
committed
Update CSVEncoder.
1 parent 2596c10 commit 4ef88b8

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

kilo-client/src/main/java/org/httprpc/kilo/io/CSVEncoder.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.IOException;
2020
import java.io.Writer;
21+
import java.util.Date;
2122
import java.util.HashMap;
2223
import java.util.List;
2324
import java.util.Map;
@@ -145,24 +146,27 @@ private void encode(Iterable<?> rows, Writer writer) throws IOException {
145146
var value = map.get(key);
146147

147148
if (value != null) {
148-
var type = value.getClass();
149+
if (!formatters.isEmpty()) {
150+
var type = value.getClass();
149151

150-
while (type != null) {
151-
var formatter = formatters.get(type);
152+
while (type != null) {
153+
var formatter = formatters.get(type);
152154

153-
if (formatter != null) {
154-
value = formatter.apply(value);
155+
if (formatter != null) {
156+
value = formatter.apply(value);
155157

156-
break;
157-
}
158+
break;
159+
}
158160

159-
type = type.getSuperclass();
161+
type = type.getSuperclass();
162+
}
160163
}
161164

162165
switch (value) {
163166
case CharSequence text -> encode(text, writer);
164167
case Number number -> encode(number, writer);
165168
case Boolean flag -> encode(flag, writer);
169+
case Date date -> encode(date, writer);
166170
default -> encode(value.toString(), writer);
167171
}
168172
}
@@ -197,4 +201,8 @@ private void encode(Number number, Writer writer) throws IOException {
197201
private void encode(Boolean flag, Writer writer) throws IOException {
198202
writer.write(flag.toString());
199203
}
204+
205+
private void encode(Date date, Writer writer) throws IOException {
206+
writer.write(String.valueOf(date.getTime()));
207+
}
200208
}

kilo-client/src/test/java/org/httprpc/kilo/io/CSVEncoderTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public void testMaps() throws IOException {
6464
entry("a", "A,B,\"C\" "),
6565
entry("b", 1),
6666
entry("c", 2.0),
67-
entry("d", true)
67+
entry("d", true),
68+
entry("e", new Date(0))
6869
),
6970
mapOf(
7071
entry("a", " D\r\nÉ\r\nF\r\n"),
@@ -82,7 +83,7 @@ public void testMaps() throws IOException {
8283
csvEncoder.write(rows, writer);
8384

8485
var expected = "\"a\",\"b\",\"c\",\"D\",\"É\"\r\n"
85-
+ "\"A,B,\"\"C\"\" \",1,2.0,true,\r\n"
86+
+ "\"A,B,\"\"C\"\" \",1,2.0,true,0\r\n"
8687
+ "\" D\r\nÉ\r\nF\r\n\",2,4.0,,\r\n";
8788

8889
assertEquals(expected, writer.toString());

0 commit comments

Comments
 (0)