int | missing | absent

Antonio antonio at abrevia.net
Mon Jun 27 23:38:10 UTC 2022


On Monday, 27 June 2022 at 23:05:46 UTC, Steven Schveighoffer 
wrote:
> On 6/27/22 9:03 AM, Antonio wrote:
>> On Wednesday, 22 June 2022 at 01:09:22 UTC, Steven 
>> Schveighoffer wrote:
>>> On 6/2/22 9:24 AM, bauss wrote:
>>>
>>> I feel it's too loose to make a best effort, and leave the 
>>> rest up to initial values, or just ignore possibly important 
>>> information during parsing.
>>>
>> 
>> May be for your case Steve.
>> 
>> I need to represent in a "typed" way complex structures where 
>> some properties can be "undefined" (not present in json) and 
>> where null value is a valid value (and not the same that 
>> "undefined" ones)... basically,  the algebraic type Undefined 
>> | Null | T
>
> I see what you are saying. What needs to happen is first, you 
> need a type wrapper that does this, which defaults to 
> undefined. Then mark it optional so it's OK if it doesn't 
> appear. Then only if the field is not present will it be marked 
> as undefined.
>
> It may even be useful to make the type wrapper itself always 
> optional, rather than having to mark it optional.
>

Exactly.

This issue/example in vibe-d treats about this solution and the 
annoying change of behavior treating "null" when @optional 
attribute is present:

https://github.com/vibe-d/vibe.d/issues/2673

The code is a "simplification" of something more complex (Special 
wrappers for **Null | T**, **Undefined | T**  and  **Undefined | 
Null | T**  with some functional stuff for match! and null-safe 
access (well, trying to:  It's really complex and I'm not enought 
experienced).

I Tried to base my solution in SumType, but I didn't know how to 
add the required fromRepresentation/toRepresentation methods for 
custom serialization/deserialization...




More information about the Digitalmars-d-learn mailing list