toJsonEncodable method
ToEncodableJson?
toJsonEncodable(
- APIRequest apiRequest,
- ToEncodableJsonProvider encodableJsonProvider,
- Object o
Implementation
ToEncodableJson? toJsonEncodable(APIRequest apiRequest,
ToEncodableJsonProvider encodableJsonProvider, Object o) {
if (o is EntityReferenceList ||
o is DateTime ||
o is Time ||
o is Decimal ||
o is DynamicNumber) {
return null;
}
var t = o is EntityReference ? o.type : o.runtimeType;
// No rule for entity type. No `ToEncodableJson` filter: return null
if (!hasRuleForEntityType(t)) return null;
var allowType = isAllowedEntityType(t);
// Block not allowed type. Return `ToEncodableJson` filter: empty `Map`
if (allowType != null && !allowType) {
return (o, j) => <String, Object>{};
}
// No rule for entity field. No `ToEncodableJson` filter: return null
if (!hasRuleForEntityTypeField(t)) {
return null;
}
return (o, j) {
if (o == null) return null;
var enc = encodableJsonProvider(o);
Object? map;
if (enc == null) {
var classReflection =
ReflectionFactory().getRegisterClassReflection(o.runtimeType);
if (classReflection != null) {
map = classReflection.toMapFromFields(o);
} else {
map = j.toJson(o, autoResetEntityCache: false);
}
} else {
map = enc(o, j);
}
if (map is! Map) return map;
var t = o.runtimeType;
var c = EntityAccessRulesContext(this, o, context: apiRequest);
map.removeWhere((key, _) {
var allowed = isAllowedEntityTypeField(t, key, context: c);
return allowed != null && !allowed;
});
return map;
};
}