** Marks a field as a property of a BSON object.
facet class BsonProp {
** Name of the BSON property name this field maps to.
**
** Defaults to the field name.
const Str? name
** The implementation 'Type' to be instantiated should this field reference a mixin or a superclass.
** Used when mapping from BSON objects to Fantom objects.
**
** Defaults to the field type.
**
** Note that a property named '_type' in the field's value overrides this 'implType'.
const Type? implType
** When converting to BSON, any Fantom value that equals this 'defVal' will be treated as if
** it were 'null' and (depending on 'ObjConverter') will *not* exist in the BSON object.
**
** When converting from BSON, any 'null' value will be converted to this 'defVal'.
**
** This is most useful for saving marker booleans and to avoid saving empty lists and maps.
const Obj? defVal
** Turns on *Pickle Mode* whereby all non '@Transient' fields are converted,
** regardless of any '@BsonProp' facets.
** Data from '@BsonProp' facets, however, will still honoured if defined.
const Bool pickleMode := false
}