handle<V> method

  1. @override
V handle<V>({
  1. required ParameterType parameterType,
  2. required V value,
  3. required String name,
  4. Kind? kind,
  5. V? defaultConstant,
  6. String? jsonName,
  7. List<Trait>? tags,
})
override

Implementation

@override
V handle<V>({
  required ParameterType parameterType,
  required V value,
  required String name,
  Kind? kind,
  V? defaultConstant,
  String? jsonName,
  List<Trait>? tags,
}) {
  if (tags != null && tags.contains(Trait.noSerialization)) {
    return value;
  }

  // JSON name defaults to Dart identifier
  jsonName ??= name;

  if (jsonObject.containsKey(jsonName)) {
    throw StateError(
      'JSON field "$jsonName" was declared twice.',
    );
  }

  if (defaultConstant != null && value == defaultConstant) {
    return value;
  }

  //
  // Handle simple, common cases
  //
  Object? jsonValue;
  if (value == null || value is bool || value is String) {
    jsonValue = value;
  } else if (value is num) {
    jsonValue = value.toDouble();
  } else {
    kind ??= Kind.find<V>();
    jsonValue = kind.encodeJsonTree(value);
  }
  jsonObject[jsonName] = jsonValue;
  return value;
}