Hi Sven,

thank you for the fix! 

I understand that #allowNil is about reading, while #writeNil: is about 
writing. 
I use the same mapping for the reader and writer. This is why I spotted the 
case.

Thanks!
Juraj

> On Nov 13, 2017, at 16:30, Sven Van Caekenberghe <[email protected]> wrote:
> 
> Juraj,
> 
> Check out:
> 
> ===
> Name: Neo-JSON-Core-SvenVanCaekenberghe.46
> Author: SvenVanCaekenberghe
> Time: 13 November 2017, 6:59:13.995868 pm
> UUID: f412799a-431a-0d00-850e-5c3c05ce5378
> Ancestors: Neo-JSON-Core-SvenVanCaekenberghe.45
> 
> Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to 
> NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka)
> 
> Add #testRectanglePointsWithNil
> ===
> Name: Neo-JSON-Tests-SvenVanCaekenberghe.44
> Author: SvenVanCaekenberghe
> Time: 13 November 2017, 6:59:37.365898 pm
> UUID: 35acdd9b-431a-0d00-850f-878405ce5378
> Ancestors: Neo-JSON-Tests-SvenVanCaekenberghe.43
> 
> Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to 
> NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka)
> 
> Add #testRectanglePointsWithNil
> ===
> 
> These should fix your last case. I used your example in the new unit test.
> 
> Note that #allowNil on a mapper is about reading, not writing.
> 
> HTH,
> 
> Sven
> 
>> On 13 Nov 2017, at 17:10, Juraj Kubelka <[email protected]> wrote:
>> 
>> Hi, 
>> 
>> I have just found the answer for the reader:
>> 
>> -=-=-=-
>> rectangleJson := '{
>>  "origin" : null,
>>  "corner" : null
>> }'.
>> 
>> (NeoJSONReader on: rectangleJson readStream)
>>  mapInstVarsFor: Point;
>>  for: Point do: [ :mapping | 
>>      mapping allowNil ];
>>  for: Rectangle do: [ :mapping | 
>>     (mapping mapInstVar: #origin) valueSchema: Point.
>>     (mapping mapInstVar: #corner) valueSchema: Point ];
>>  nextAs: Rectangle.
>> -=-=-=-
>> 
>> I have an impression that there is a bug in the writer. While the following 
>> example works: 
>> 
>> -=-=-=-
>> String streamContents: [ :stream |
>>   (NeoJSONWriter on: stream)
>>              for: Point do: [ :mapping | 
>>                      mapping mapAllInstVars.
>>                      mapping allowNil ];
>>         for: Rectangle do: [ :mapping | 
>>                      (mapping mapInstVar: #origin) valueSchema: Point.
>>                      (mapping mapInstVar: #corner) valueSchema: Point ];
>>      nextPut: Rectangle new ].
>> -=-=-=-
>> 
>> the following example does not work: 
>> 
>> -=-=-=-
>> String streamContents: [ :stream |
>>   (NeoJSONWriter on: stream)
>>              for: Point do: [ :mapping | 
>>                      mapping mapAllInstVars.
>>                      mapping allowNil ];
>>         for: Rectangle do: [ :mapping | 
>>                      (mapping mapInstVar: #origin) valueSchema: Point.
>>                      (mapping mapInstVar: #corner) valueSchema: Point ];
>>      writeNil: true;
>>      nextPut: Rectangle new ].
>> -=-=-=-
>> 
>> What do you think?
>> Juraj
>> 
>>> On Nov 13, 2017, at 12:50, Juraj Kubelka <[email protected]> wrote:
>>> 
>>> Hi,
>>> 
>>> Please, how should I modify the mapping to be able to parse the following 
>>> example?
>>> 
>>> -=-=-=-
>>> rectangleJson := '{
>>>  "origin" : null,
>>>  "corner" : null
>>> }'.
>>> 
>>> (NeoJSONReader on: rectangleJson readStream)
>>>  mapInstVarsFor: Point;
>>>  for: Rectangle do: [ :mapping | 
>>>     (mapping mapInstVar: #origin) valueSchema: Point.
>>>     (mapping mapInstVar: #corner) valueSchema: Point ];
>>>  nextAs: Rectangle.
>>> -=-=-=-
>>> 
>>> I receive from a server JSON messages including null values. 
>>> Can we say use Point value schema or null? How? 
>>> 
>>> In the documentation I can see the example: 
>>> 
>>> -=-=-=-
>>> String streamContents: [ :stream |
>>>  (NeoJSONWriter on: stream)
>>>     mapAllInstVarsFor: Point;
>>>     writeNil: true;
>>>     nextPut: Point new ].
>>> -=-=-=-
>>> that produces {"x":null,"y":null}
>>> 
>>> But I do not see how to apply this for the following example: 
>>> -=-=-=-
>>> String streamContents: [ :stream |
>>>  (NeoJSONWriter on: stream)
>>>     mapAllInstVarsFor: Point;
>>>        for: Rectangle do: [ :mapping | 
>>>          (mapping mapInstVar: #origin) valueSchema: Point.
>>>          (mapping mapInstVar: #corner) valueSchema: Point ];
>>>     writeNil: true;
>>>     nextPut: Rectangle new ].
>>> -=-=-=-
>>> 
>>> Thanks,
>>> Juraj
>>> 
>>> 
>> 
> 
> 


Reply via email to