parse<T> static method
ApiResponse<T>
parse<T>({
- required dynamic body,
- required int statusCode,
- required AutoPilotConfig cfg,
- T parser(
- dynamic json
- required Duration responseTime,
- String? requestId,
Implementation
static ApiResponse<T> parse<T>({
required dynamic body,
required int statusCode,
required AutoPilotConfig cfg,
T Function(dynamic json)? parser,
required Duration responseTime,
String? requestId,
}) {
try {
if (body == null) {
return ApiResponse<T>.success(
statusCode: statusCode,
responseTime: responseTime,
requestId: requestId,
);
}
if (body is Map<String, dynamic>) {
final successRaw = body[cfg.successKey];
final isOk = successRaw == cfg.successValue ||
(cfg.successValue == true &&
(successRaw == 1 || successRaw == '1')) ||
(statusCode >= 200 && statusCode < 300 && successRaw == null);
final msg = (body[cfg.messageKey] ?? '').toString();
final rawData = body[cfg.dataKey] ?? body;
if (!isOk) {
return ApiResponse<T>.failure(
message: msg.isNotEmpty ? msg : _httpMsg(statusCode),
statusCode: statusCode,
raw: body,
errors: body['errors'] as Map<String, dynamic>?,
responseTime: responseTime,
requestId: requestId,
);
}
T? parsed;
if (parser != null && rawData != null) {
parsed = _safe(parser, rawData);
}
return ApiResponse<T>.success(
data: parsed,
message: msg.isNotEmpty ? msg : 'Success',
statusCode: statusCode,
raw: body,
responseTime: responseTime,
requestId: requestId,
);
}
if (body is List && parser != null) {
final list = body.map((e) => parser(e)).toList();
return ApiResponse<T>.success(
data: list as T?,
statusCode: statusCode,
raw: body,
responseTime: responseTime,
requestId: requestId,
);
}
// raw value (string, int, bool etc.)
return ApiResponse<T>.success(
data: parser != null ? _safe(parser, body) : (body as T?),
statusCode: statusCode,
raw: body,
responseTime: responseTime,
requestId: requestId,
);
} catch (e) {
AutoPilotLogger.warn('Parse error: $e');
throw ParseException('Failed to parse response: $e');
}
}