FAST default operator with no value

fast-protocol

#1

Eurex have just released an updated FAST spec and have changed the operator on a number of fields to “default” but with no value specified.

Can anyone explain to me how this can work or point me to a good technical resource?

Thanks.


#2

It is a bit confusing but it is possible to have a default field that has no initial value as long as the field has an optional presence. If a value is not specified and it is optional presence and default operator the the field is absent in the unencoded message if the field is not set to a value when encoded. Maybe someone can remember why this behavior of an empty default operator on an optional field was supported in FAST. I can’t recall why FAST got this way in 1.1.

From the 1.1 specification:

6.3.4 Default Operator
The default operator specifies that the value of a field is either present in the stream or it will be the initial value. Unless the field has optional presence, it is a static error [ERR S5] if the instruction context has no initial value. If the field has optional presence and no initial value, the field is considered absent when there is no value in the stream.
The default operator is applicable to all field types.

\default = element default { initialValueAttr? }


#3

@aybiss the objective is to save bytes on the wire. If you have an optional field with a default value, you have to put a byte (nullable representation) on to the wire if the actual value is absent, i.e. different from the initial value. If there is no initial value, there is no such difference and it is sufficient to set the presence map bit to zero.


#4

Thanks guys, that makes sense and it is working so far (fingers crossed).