August 12

Since we've already established a framework for customized deserialization and added some tests (such as case insensitivity), we now want to incorporate case insensitivity as an optional feature into the default deserialization policy.
https://github.com/schveiguy/jsoniopipe/pull/54
https://github.com/schveiguy/jsoniopipe/pull/57

The insensitivity in the test is like:

static struct CaseInsensitivePolicy {

        void onField(JT, T, C)(ref JT tokenizer, ref T item, JSONItem key, ref C context) {
            // Case-insensitive comparison
            import std.string : icmp;
            alias members = SerializableMembers!T;

            auto keyStr = key.data(tokenizer.chain);

            static foreach(i, memberName; members) {
                {
                    enum jsonName = memberName;
                    if (icmp(keyStr, jsonName) == 0) {
                        deserializeImpl(this, tokenizer, __traits(getMember, item, memberName));
                        context[i] = true;
                        return;
                    }
                }
            }
            throw new JSONIopipeException(format("No member named '%s' in type `%s`", keyStr, T.stringof));
        }
    }