Skip to content

Commit e0f1aa0

Browse files
committed
added T Unpacker#read(Template<T>)
1 parent 64cc860 commit e0f1aa0

4 files changed

Lines changed: 112 additions & 5 deletions

File tree

src/main/java/org/msgpack/unpacker/AbstractUnpacker.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,27 @@ public Value readValue() throws IOException {
7070

7171
protected abstract boolean tryReadNil() throws IOException;
7272

73+
@Override
74+
public <T> T read(Template<T> template) throws IOException {
75+
return template.read(this, null);
76+
}
77+
7378
@Override
7479
public <T> T read(Class<T> klass) throws IOException {
7580
if(tryReadNil()) {
7681
return null;
7782
}
78-
Template<? super T> tmpl = msgpack.lookup(klass);
79-
return (T) tmpl.read(this, null);
83+
Template<T> tmpl = msgpack.lookup(klass);
84+
return tmpl.read(this, null);
8085
}
8186

8287
@Override
8388
public <T> T read(T to) throws IOException {
8489
if(tryReadNil()) {
8590
return null;
8691
}
87-
Template<? super T> tmpl = msgpack.lookup((Class<T>) to.getClass());
88-
return (T) tmpl.read(this, to);
92+
Template<T> tmpl = msgpack.lookup((Class<T>) to.getClass());
93+
return tmpl.read(this, to);
8994
}
9095
}
9196

src/main/java/org/msgpack/unpacker/Unpacker.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
2323
import java.math.BigInteger;
2424
import java.lang.Iterable;
2525
import org.msgpack.type.Value;
26+
import org.msgpack.template.Template;
2627

2728
/**
2829
* Standard deserializer.
2930
*
3031
* @version 0.6.0
3132
*/
3233
public interface Unpacker extends Iterable<Value>, Closeable {
34+
public <T> T read(Template<T> template) throws IOException;
35+
3336
public <T> T read(Class<T> klass) throws IOException;
3437

3538
public <T> T read(T to) throws IOException;

src/test/java/org/msgpack/template/TestTemplates.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.msgpack.unpacker.BufferUnpacker;
2020

2121
import static org.msgpack.template.Templates.*;
22-
import static org.msgpack.template.Templates.TByte;
2322

2423
import org.junit.Test;
2524

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package org.msgpack.unpacker;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
6+
import java.io.IOException;
7+
import java.nio.ByteBuffer;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.Collection;
11+
import java.util.Date;
12+
import java.math.BigInteger;
13+
import java.math.BigDecimal;
14+
import java.util.ArrayList;
15+
16+
import org.msgpack.MessagePack;
17+
import org.msgpack.packer.Packer;
18+
import org.msgpack.packer.BufferPacker;
19+
import org.msgpack.unpacker.Unpacker;
20+
import org.msgpack.unpacker.BufferUnpacker;
21+
import org.msgpack.template.Template;
22+
23+
import static org.msgpack.template.Templates.*;
24+
25+
import org.junit.Test;
26+
import org.junit.Ignore;
27+
28+
29+
public class TestReadTemplate {
30+
public static enum MyEnum {
31+
A, B, C;
32+
}
33+
34+
@Test
35+
public void testReadTemplateNull() throws IOException {
36+
Byte tbyte = u().read(TByte);
37+
assertNull(tbyte);
38+
39+
Short tshort = u().read(TShort);
40+
assertNull(tshort);
41+
42+
Integer tinteger = u().read(TInteger);
43+
assertNull(tinteger);
44+
45+
Long tlong = u().read(TLong);
46+
assertNull(tlong);
47+
48+
Character tcharacter = u().read(TCharacter);
49+
assertNull(tcharacter);
50+
51+
BigInteger tbiginteger = u().read(TBigInteger);
52+
assertNull(tbiginteger);
53+
54+
BigDecimal tbigdecimail = u().read(TBigDecimal);
55+
assertNull(tbigdecimail);
56+
57+
Float tfloat = u().read(TFloat);
58+
assertNull(tfloat);
59+
60+
Double tdouble = u().read(TDouble);
61+
assertNull(tdouble);
62+
63+
Boolean tboolean = u().read(TBoolean);
64+
assertNull(tboolean);
65+
66+
String tstring = u().read(TString);
67+
assertNull(tstring);
68+
69+
byte[] tbytearray = u().read(TByteArray);
70+
assertNull(tbytearray);
71+
72+
ByteBuffer tbytebuffer = u().read(TByteBuffer);
73+
assertNull(tbytebuffer);
74+
75+
Date tdate = u().read(TDate);
76+
assertNull(tdate);
77+
78+
List<String> tlist = u().read(tList(TString));
79+
assertNull(tlist);
80+
81+
Map<String,Integer> tmap = u().read(tMap(TString, TInteger));
82+
assertNull(tmap);
83+
84+
Collection<Long> tcollection = u().read(tCollection(TLong));
85+
assertNull(tcollection);
86+
87+
//MyEnum tordinalenum = u().read(tOrdinalEnum(MyEnum.class));
88+
//assertNull(tordinalenum);
89+
}
90+
91+
// return unpacker that can read a nil
92+
private Unpacker u() throws IOException {
93+
MessagePack msgpack = new MessagePack();
94+
BufferPacker pk = msgpack.createBufferPacker();
95+
pk.writeNil();
96+
Unpacker u = msgpack.createBufferUnpacker(pk.toByteArray());
97+
return u;
98+
}
99+
}
100+

0 commit comments

Comments
 (0)