www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - GSOC2025: Json Library for D, weekly update #7

We added the policy parameter to all deserializeImpl methods. 
This allows users to customize deserialization for any specific 
type, while the remaining types can still use the module-level 
deserializeImpl method via UFCS.

deserializeImpl is like:
```d
void deserializeImpl(P, T, JT)(ref P policy, ref JT tokenizer, 
ref T item) if (type constrains) {....}
```

An example of customized policy is like:
```d
static struct DTStringPolicy {
         void deserializeImpl(JT, T)(ref JT tokenizer, ref T item) 
{
             static if (is(T == DateTime))
             {
                 // Deserialize DateTime from a string
                 auto jsonItem = tokenizer.nextSignificant
                     .jsonExpect(JSONToken.String, "Parsing 
DateTime");
                 item = 
DateTime.fromSimpleString(extractString!string(jsonItem, 
tokenizer.chain));
             }
             else {
                 // default to module behavior
                 .deserializeImpl(this, tokenizer, item);
             };
         }
}
```

https://github.com/schveiguy/jsoniopipe/pull/51
https://github.com/schveiguy/jsoniopipe/pull/52
Aug 04