toJson method

  1. @override
Map<String, dynamic> toJson({
  1. OptimizeFor optimizeFor = OptimizeFor.put,
})
override

Converts this object into JSON format.

optimizeFor lets the program know what information to include in the JSON data map.

  • OptimizeFor.put (the default value) is used when making a data map that is being placed in a PUT request. This only includes data that has changed.
  • OptimizeFor.putFull is used when a parent object updates; so, all of the children are required to be present for the PUT request.
  • OptimizeFor.post is used when making a data map for a POST request.
  • OptimizeFor.dontOptimize is used to get all of the data contained in this object.

Throws InvalidIdException if any of the children's IDs or service's IDs are empty and optimizeFor is not set to OptimizeFor.dontOptimize.

Implementation

@override
Map<String, dynamic> toJson({OptimizeFor optimizeFor = OptimizeFor.put}) {
  // PUT
  if (identical(optimizeFor, OptimizeFor.put)) {
    Map<String, dynamic> toReturn = {};

    if (!identical(type, originalType)) {
      toReturn[ApiFields.type] = type.value;
    }

    if (!const DeepCollectionEquality.unordered()
        .equals(children, _originalChildren)) {
      toReturn[ApiFields.children] = children
          .map((child) => child.toJson(optimizeFor: OptimizeFor.putFull))
          .toList();
    }

    if (metadata != _originalMetadata) {
      toReturn[ApiFields.metadata] =
          metadata.toJson(optimizeFor: OptimizeFor.putFull);
    }

    return toReturn;
  }

  // PUT FULL & POST
  if (identical(optimizeFor, OptimizeFor.putFull) ||
      identical(optimizeFor, OptimizeFor.post)) {
    return {
      ApiFields.type: type.value,
      ApiFields.children: children
          .map((child) => child.toJson(optimizeFor: OptimizeFor.putFull))
          .toList(),
      ApiFields.metadata: metadata.toJson(optimizeFor: optimizeFor),
    };
  }

  // DEFAULT
  return {
    ApiFields.type: type.value,
    ApiFields.id: id,
    ApiFields.idV1: idV1,
    ApiFields.children: children
        .map((child) => child.toJson(optimizeFor: optimizeFor))
        .toList(),
    ApiFields.services: services
        .map((service) => service.toJson(optimizeFor: optimizeFor))
        .toList(),
    ApiFields.metadata: metadata.toJson(optimizeFor: optimizeFor),
  };
}