Skip to content

Commit c4fcf43

Browse files
committed
Optionally allow JSON encode/decode
1 parent e7f1a02 commit c4fcf43

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

codecs/__init__.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ cdef class CodecContext:
99

1010
cpdef get_text_codec(self)
1111
cdef is_encoding_utf8(self)
12+
cpdef get_json_decoder(self)
13+
cdef is_decoding_json(self)
14+
cpdef get_json_encoder(self)
15+
cdef is_encoding_json(self)
1216

1317

1418
ctypedef object (*encode_func)(CodecContext settings,

codecs/context.pyx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,15 @@ cdef class CodecContext:
1212

1313
cdef is_encoding_utf8(self):
1414
raise NotImplementedError
15+
16+
cpdef get_json_decoder(self):
17+
raise NotImplementedError
18+
19+
cdef is_decoding_json(self):
20+
raise NotImplementedError
21+
22+
cpdef get_json_encoder(self):
23+
raise NotImplementedError
24+
25+
cdef is_encoding_json(self):
26+
raise NotImplementedError

codecs/json.pyx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ cdef jsonb_encode(CodecContext settings, WriteBuffer buf, obj):
1010
char *str
1111
ssize_t size
1212

13+
if settings.is_encoding_json():
14+
obj = settings.get_json_encoder().encode(obj)
15+
1316
as_pg_string_and_size(settings, obj, &str, &size)
1417

1518
if size > 0x7fffffff - 1:
@@ -26,4 +29,9 @@ cdef jsonb_decode(CodecContext settings, FRBuffer *buf):
2629
if format != 1:
2730
raise ValueError('unexpected JSONB format: {}'.format(format))
2831

29-
return text_decode(settings, buf)
32+
rv = text_decode(settings, buf)
33+
34+
if settings.is_decoding_json():
35+
rv = settings.get_json_decoder().decode(rv)
36+
37+
return rv

0 commit comments

Comments
 (0)