| // 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."); | |
| } | |
| } |