-
Notifications
You must be signed in to change notification settings - Fork 1
/
cojson.ccs
99 lines (88 loc) · 3.26 KB
/
cojson.ccs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright (C) 2017 Eugene Hutorny <eugene@hutorny.in.ua>
*
* cojson.ccs - cascaded configuration for COJSON
*
* This file is part of COJSON Library. http://hutorny.in.ua/projects/cojson
* This file is part of µcuREST Library. http://hutorny.in.ua/projects/micurest
*
* The COJSON Library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License v2
* as published by the Free Software Foundation;
*
* The COJSON Library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License v2
* along with the COJSON Library; if not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
*/
#pragma once
#include <ccs.hpp>
#include <elemental.ccs>
#include <stdint.h>
namespace cojson {
namespace details {
struct lexer;
}
struct config;
/**
* Default cojson configuration
*/
struct default_config : elemental::default_config {
/** controls behavior on integral overflow */
static constexpr enum class overflow_is {
ignored, /** overflow condition is silently ignored */
error, /** overflow causes an error */
saturated /** numbers are saturated on overflow */
} overflow = overflow_is::ignored;
/** controls implementation of iostate::error */
static constexpr enum class iostate_is {
_notvirtual,/** iostate::error is implemented as non-virtual */
_virtual, /** iostate::error is implemented as virtual */
} iostate = iostate_is::_notvirtual; /* iostate_is::_virtual; */
/** controls behavior on read encountered element mismatching
* targed data type */
enum class mismatch_is {
skipped,
error
};
/** controls default null handling.
* could be overridden in a custom accessor */
static constexpr enum class null_is {
skipped, /** null is skipped */
error, /** null causes an error */
} null = null_is::skipped;
static constexpr bool sprintf_buffer_static = false;
static constexpr unsigned sprintf_buffer_size = 24; /* double should fit */
static constexpr enum class write_double_impl_is {
internal,
with_sprintf,
external
} write_double_impl = write_double_impl_is::internal;
using write_double_integral_type = uint32_t;
static constexpr unsigned write_double_precision = 9;
private:
default_config();
};
}
namespace configuration {
template<typename target, typename build>
struct Configuration<cojson::config, target, build>
: cojson::default_config {};
template<typename target, typename build>
struct Configuration<cojson::details::lexer, target, build> {
/** controls behavior on read encountered element mismatching the
* target data type */
static constexpr auto mismatch =
cojson::default_config::mismatch_is::skipped;
/** controls size of temporary buffer */
static constexpr unsigned temporary_size = 32;
/** controls implementation of temp buffer, used for reading names */
static constexpr auto temporary_static = false;
/** sets maximal length of a JSON key length */
static constexpr unsigned max_key_length = temporary_size;
};
}