79 lines
2.2 KiB
Dart
79 lines
2.2 KiB
Dart
import 'dart:convert';
|
|
|
|
class AliceParser {
|
|
static const String _emptyBody = "Body is empty";
|
|
static const String _unknownContentType = "Unknown";
|
|
static const String _jsonContentTypeSmall = "content-type";
|
|
static const String _jsonContentTypeBig = "Content-Type";
|
|
static const String _stream = "Stream";
|
|
static const String _applicationJson = "application/json";
|
|
static const String _parseFailedText = "Failed to parse ";
|
|
static const JsonEncoder encoder = JsonEncoder.withIndent(' ');
|
|
|
|
static String _parseJson(dynamic json) {
|
|
try {
|
|
return encoder.convert(json);
|
|
} catch (exception) {
|
|
return json.toString();
|
|
}
|
|
}
|
|
|
|
static dynamic _decodeJson(dynamic body) {
|
|
try {
|
|
return json.decode(body as String);
|
|
} catch (exception) {
|
|
return body;
|
|
}
|
|
}
|
|
|
|
static String formatBody(dynamic body, String? contentType) {
|
|
try {
|
|
if (body == null) {
|
|
return _emptyBody;
|
|
}
|
|
|
|
var bodyContent = _emptyBody;
|
|
|
|
if (contentType == null ||
|
|
!contentType.toLowerCase().contains(_applicationJson)) {
|
|
final bodyTemp = body.toString();
|
|
|
|
if (bodyTemp.isNotEmpty) {
|
|
bodyContent = bodyTemp;
|
|
}
|
|
} else {
|
|
if (body is String && body.contains("\n")) {
|
|
bodyContent = body;
|
|
} else {
|
|
if (body is String) {
|
|
if (body.isNotEmpty) {
|
|
//body is minified json, so decode it to a map and let the encoder pretty print this map
|
|
bodyContent = _parseJson(_decodeJson(body));
|
|
}
|
|
} else if (body is Stream) {
|
|
bodyContent = _stream;
|
|
} else {
|
|
bodyContent = _parseJson(body);
|
|
}
|
|
}
|
|
}
|
|
|
|
return bodyContent;
|
|
} catch (exception) {
|
|
return _parseFailedText + body.toString();
|
|
}
|
|
}
|
|
|
|
static String? getContentType(Map<String, dynamic>? headers) {
|
|
if (headers != null) {
|
|
if (headers.containsKey(_jsonContentTypeSmall)) {
|
|
return headers[_jsonContentTypeSmall] as String?;
|
|
}
|
|
if (headers.containsKey(_jsonContentTypeBig)) {
|
|
return headers[_jsonContentTypeBig] as String?;
|
|
}
|
|
}
|
|
return _unknownContentType;
|
|
}
|
|
}
|