| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// Throws an [ArgumentError] if [message] isn't recursively JSON-safe. |
| void ensureJsonEncodable(Object? message) { |
| if (message == null || |
| message is String || |
| message is num || |
| message is bool) { |
| // JSON-encodable, hooray! |
| } else if (message is List) { |
| for (var element in message) { |
| ensureJsonEncodable(element); |
| } |
| } else if (message is Map) { |
| message.forEach((key, value) { |
| if (key is! String) { |
| throw ArgumentError("$message can't be JSON-encoded."); |
| } |
| |
| ensureJsonEncodable(value); |
| }); |
| } else { |
| throw ArgumentError.value("$message can't be JSON-encoded."); |
| } |
| } |