Open bear24rw opened 1 year ago
I removed the bug label as this is documented behavior. We cannot change this behavior as it would be a breaking change. I could think of a different macro to achieve this behavior though.
We cannot change this behavior as it would be a breaking change.
I agree. I think there is definitely a legitimate usecase for the current behavior for weakly typed enums which might be commonly used with implicit (un-named) enum values, for example:
enum State {
INIT = 0
SETUP = 1
STEP = 2
// bunch of implicit steps
DONE = 10
};
if (step == State::STEP + 4) ...
It's less likely someone would be using an enum class
in the same way but it's valid.
I could think of a different macro to achieve this behavior though.
It's almost like the current NLOHMANN_JSON_SERIALIZE_ENUM
macro works like NLOHMANN_DEFINE_TYPE_*_WITH_DEFAULT
. It's too bad we can't rename the exist macro to NLOHMANN_JSON_SERIALIZE_ENUM_WITH_DEFAULT
.
Either way I'd be very eager to use a new more strict macro!
I could think of a different macro to achieve this behavior though.
Some potential naming options for a new enum courtesy of chatGPT
NLOHMANN_JSON_SERIALIZE_ENUM_STRICT
NLOHMANN_JSON_SERIALIZE_ENUM_CHECKED
NLOHMANN_JSON_SERIALIZE_ENUM_SAFE
NLOHMANN_JSON_SERIALIZE_ENUM_ENSURE
NLOHMANN_JSON_SERIALIZE_ENUM_VALIDATE
NLOHMANN_JSON_SERIALIZE_ENUM_STRICT_SERIALIZATION
NLOHMANN_JSON_SERIALIZE_ENUM_SAFE_DESERIALIZATION
NLOHMANN_JSON_SERIALIZE_ENUM_CHECKED_CONVERSION
NLOHMANN_JSON_SERIALIZE_ENUM_ENSURE_MAPPING
NLOHMANN_JSON_SERIALIZE_ENUM_VALIDATE_VALUES
I like NLOHMANN_JSON_SERIALIZE_ENUM_STRICT
.
just opened a MR for NLOHMANN_JSON_SERIALIZE_ENUM_STRICT
@pabloariasal why was https://github.com/nlohmann/json/pull/3996 closed? I just ran into this issue again and am looking forward to getting your PR merged.
Same here.
Same
Any update on this? @pabloariasal
Description
I had a json document with an invalid enum string. I would like an exception to be raised if the string is not a known conversion back to the enum. I don't want to have to add and check an
Unknown
orInvalid
enum value which would only be used for json serialization.This is well documented: "undefined JSON values will default to the first specified conversion." but is IMO is surprising behavior since we throw
json.exception.type_error
's for other type conversions if they fail (like converting an integer in the json document to astd::string
)This is maybe only a good idea for strongly typed
enum class
's.Reproduction steps
Expected vs. actual results
Expected: It prints 'invalid color' Actual:
color
gets set toColor::red
I believe the behavior I am after can be achieved by with this patch
Minimal code example
No response
Error messages
No response
Compiler and operating system
clang 15.0.7
Library version
v3.11.2
Validation
develop
branch is used.