THATMobile/alice/lib/utils/alice_parser.dart
2026-02-26 10:39:42 +07:00

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;
}
}