Skip to content

Commit 7b4e31a

Browse files
committed
Complete implementation of #301
1 parent df07ca2 commit 7b4e31a

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

cbor/src/main/java/com/fasterxml/jackson/dataformat/cbor/databind/CBORMapper.java

+45-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.fasterxml.jackson.dataformat.cbor.databind;
22

33
import com.fasterxml.jackson.core.Version;
4+
45
import com.fasterxml.jackson.databind.ObjectMapper;
56
import com.fasterxml.jackson.databind.cfg.MapperBuilder;
7+
68
import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
9+
import com.fasterxml.jackson.dataformat.cbor.CBORGenerator;
710
import com.fasterxml.jackson.dataformat.cbor.PackageVersion;
811

912
/**
@@ -23,8 +26,50 @@ public class CBORMapper extends ObjectMapper
2326
*/
2427
public static class Builder extends MapperBuilder<CBORMapper, Builder>
2528
{
29+
protected final CBORFactory _streamFactory; // since 2.14
30+
2631
public Builder(CBORMapper m) {
2732
super(m);
33+
_streamFactory = m.getFactory();
34+
}
35+
36+
/*
37+
/******************************************************************
38+
/* Format features
39+
/******************************************************************
40+
*/
41+
42+
/**
43+
* @since 2.14
44+
*/
45+
public Builder enable(CBORGenerator.Feature... features) {
46+
for (CBORGenerator.Feature f : features) {
47+
_streamFactory.enable(f);
48+
}
49+
return this;
50+
}
51+
52+
/**
53+
* @since 2.14
54+
*/
55+
public Builder disable(CBORGenerator.Feature... features) {
56+
for (CBORGenerator.Feature f : features) {
57+
_streamFactory.disable(f);
58+
}
59+
return this;
60+
}
61+
62+
/**
63+
* @since 2.14
64+
*/
65+
public Builder configure(CBORGenerator.Feature f, boolean state)
66+
{
67+
if (state) {
68+
_streamFactory.enable(f);
69+
} else {
70+
_streamFactory.disable(f);
71+
}
72+
return this;
2873
}
2974
}
3075

@@ -46,7 +91,6 @@ protected CBORMapper(CBORMapper src) {
4691
super(src);
4792
}
4893

49-
@SuppressWarnings("unchecked")
5094
public static CBORMapper.Builder builder() {
5195
return new Builder(new CBORMapper());
5296
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.fasterxml.jackson.dataformat.cbor.mapper;
2+
3+
import com.fasterxml.jackson.dataformat.cbor.CBORGenerator;
4+
import com.fasterxml.jackson.dataformat.cbor.CBORTestBase;
5+
import com.fasterxml.jackson.dataformat.cbor.databind.CBORMapper;
6+
7+
public class CBORMapperTest extends CBORTestBase
8+
{
9+
/*
10+
/**********************************************************
11+
/* Tests for [dataformats-binary#301]
12+
/**********************************************************
13+
*/
14+
15+
public void testStreamingFeaturesViaMapper() throws Exception
16+
{
17+
final Integer SMALL_INT = Integer.valueOf(3);
18+
CBORMapper mapperWithMinimalInts = CBORMapper.builder()
19+
.enable(CBORGenerator.Feature.WRITE_MINIMAL_INTS)
20+
.build();
21+
byte[] encodedMinimal = mapperWithMinimalInts.writeValueAsBytes(SMALL_INT);
22+
assertEquals(1, encodedMinimal.length);
23+
24+
CBORMapper mapperFullInts = CBORMapper.builder()
25+
.disable(CBORGenerator.Feature.WRITE_MINIMAL_INTS)
26+
.build();
27+
byte[] encodedNotMinimal = mapperFullInts.writeValueAsBytes(SMALL_INT);
28+
assertEquals(5, encodedNotMinimal.length);
29+
30+
// And then verify we can read it back, either way
31+
assertEquals(SMALL_INT, mapperWithMinimalInts.readValue(encodedMinimal, Object.class));
32+
assertEquals(SMALL_INT, mapperWithMinimalInts.readValue(encodedNotMinimal, Object.class));
33+
assertEquals(SMALL_INT, mapperFullInts.readValue(encodedMinimal, Object.class));
34+
assertEquals(SMALL_INT, mapperFullInts.readValue(encodedNotMinimal, Object.class));
35+
}
36+
}

release-notes/VERSION-2.x

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ Modules:
1010
=== Releases ===
1111
------------------------------------------------------------------------
1212

13+
2.14.0 (not yet released)
14+
15+
#301: (cbor, smile) Missing configuration methods for format-specific
16+
parser/generator features
17+
1318
2.13.1 (not yet released)
1419

1520
- (ion) Add missing `withDefaultImpl()` override for `IonAnnotationTypeResolverBuilder`

0 commit comments

Comments
 (0)