mirror of
https://github.com/foss42/apidash.git
synced 2025-05-29 04:50:36 +08:00
JSON Serialization and Deserialization for models
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:apidash/consts.dart';
|
import 'package:apidash/consts.dart';
|
||||||
|
import 'package:apidash/utils/utils.dart' show mapToRows, rowsToMap;
|
||||||
import 'kvrow_model.dart';
|
import 'kvrow_model.dart';
|
||||||
import 'response_model.dart';
|
import 'response_model.dart';
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ class RequestModel {
|
|||||||
final List<KVRow>? requestHeaders;
|
final List<KVRow>? requestHeaders;
|
||||||
final List<KVRow>? requestParams;
|
final List<KVRow>? requestParams;
|
||||||
final ContentType requestBodyContentType;
|
final ContentType requestBodyContentType;
|
||||||
final dynamic requestBody;
|
final String? requestBody;
|
||||||
final int? responseStatus;
|
final int? responseStatus;
|
||||||
final String? message;
|
final String? message;
|
||||||
final ResponseModel? responseModel;
|
final ResponseModel? responseModel;
|
||||||
@ -53,7 +54,7 @@ class RequestModel {
|
|||||||
List<KVRow>? requestHeaders,
|
List<KVRow>? requestHeaders,
|
||||||
List<KVRow>? requestParams,
|
List<KVRow>? requestParams,
|
||||||
ContentType? requestBodyContentType,
|
ContentType? requestBodyContentType,
|
||||||
dynamic requestBody,
|
String? requestBody,
|
||||||
int? responseStatus,
|
int? responseStatus,
|
||||||
String? message,
|
String? message,
|
||||||
ResponseModel? responseModel,
|
ResponseModel? responseModel,
|
||||||
@ -74,12 +75,74 @@ class RequestModel {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
factory RequestModel.fromJson(Map<String, dynamic> data) {
|
||||||
|
HTTPVerb method;
|
||||||
|
ContentType requestBodyContentType;
|
||||||
|
ResponseModel? responseModel;
|
||||||
|
|
||||||
|
final id = data["id"] as String;
|
||||||
|
try {
|
||||||
|
method = HTTPVerb.values.byName(data["method"] as String);
|
||||||
|
} catch (e) {
|
||||||
|
method = kDefaultHttpMethod;
|
||||||
|
}
|
||||||
|
final url = data["url"] as String;
|
||||||
|
final requestHeaders =
|
||||||
|
mapToRows(data["requestHeaders"] as Map<String, String>?);
|
||||||
|
final requestParams =
|
||||||
|
mapToRows(data["requestParams"] as Map<String, String>?);
|
||||||
|
try {
|
||||||
|
requestBodyContentType =
|
||||||
|
ContentType.values.byName(data["requestBodyContentType"] as String);
|
||||||
|
} catch (e) {
|
||||||
|
requestBodyContentType = kDefaultContentType;
|
||||||
|
}
|
||||||
|
final requestBody = data["requestBody"] as String?;
|
||||||
|
final responseStatus = data["responseStatus"] as int?;
|
||||||
|
final message = data["message"] as String?;
|
||||||
|
final responseModelJson = data["responseModel"] as Map<String, dynamic>?;
|
||||||
|
if (responseModelJson != null) {
|
||||||
|
responseModel = ResponseModel.fromJson(responseModelJson);
|
||||||
|
} else {
|
||||||
|
responseModel = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RequestModel(
|
||||||
|
id: id,
|
||||||
|
method: method,
|
||||||
|
url: url,
|
||||||
|
requestTabIndex: 0,
|
||||||
|
requestHeaders: requestHeaders,
|
||||||
|
requestParams: requestParams,
|
||||||
|
requestBodyContentType: requestBodyContentType,
|
||||||
|
requestBody: requestBody,
|
||||||
|
responseStatus: responseStatus,
|
||||||
|
message: message,
|
||||||
|
responseModel: responseModel,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {
|
||||||
|
"id": id,
|
||||||
|
"method": method.name,
|
||||||
|
"url": url,
|
||||||
|
"requestHeaders": rowsToMap(requestHeaders),
|
||||||
|
"requestParams": rowsToMap(requestParams),
|
||||||
|
"requestBodyContentType": requestBodyContentType.name,
|
||||||
|
"requestBody": requestBody,
|
||||||
|
"responseStatus": responseStatus,
|
||||||
|
"message": message,
|
||||||
|
"responseModel": responseModel?.toJson(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return [
|
return [
|
||||||
id,
|
"Request Id: $id",
|
||||||
method.name,
|
"Request Method: ${method.name}",
|
||||||
"URL: $url",
|
"Request URL: $url",
|
||||||
"Request Tab Index: ${requestTabIndex.toString()}",
|
"Request Tab Index: ${requestTabIndex.toString()}",
|
||||||
"Request Headers: ${requestHeaders.toString()}",
|
"Request Headers: ${requestHeaders.toString()}",
|
||||||
"Request Params: ${requestParams.toString()}",
|
"Request Params: ${requestParams.toString()}",
|
||||||
|
@ -2,7 +2,7 @@ import 'dart:io';
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart' show mergeMaps;
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
import 'package:http_parser/http_parser.dart';
|
import 'package:http_parser/http_parser.dart';
|
||||||
import 'package:apidash/utils/utils.dart';
|
import 'package:apidash/utils/utils.dart';
|
||||||
@ -49,7 +49,6 @@ class ResponseModel {
|
|||||||
final body = (mediaType?.subtype == kSubTypeJson)
|
final body = (mediaType?.subtype == kSubTypeJson)
|
||||||
? utf8.decode(response.bodyBytes)
|
? utf8.decode(response.bodyBytes)
|
||||||
: response.body;
|
: response.body;
|
||||||
final formattedBody = formatBody(body, mediaType);
|
|
||||||
return ResponseModel(
|
return ResponseModel(
|
||||||
statusCode: response.statusCode,
|
statusCode: response.statusCode,
|
||||||
headers: responseHeaders,
|
headers: responseHeaders,
|
||||||
@ -57,19 +56,62 @@ class ResponseModel {
|
|||||||
contentType: contentType,
|
contentType: contentType,
|
||||||
mediaType: mediaType,
|
mediaType: mediaType,
|
||||||
body: body,
|
body: body,
|
||||||
formattedBody: formattedBody,
|
formattedBody: formatBody(body, mediaType),
|
||||||
bodyBytes: response.bodyBytes,
|
bodyBytes: response.bodyBytes,
|
||||||
time: time,
|
time: time,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
factory ResponseModel.fromJson(Map<String, dynamic> data) {
|
||||||
|
MediaType? mediaType;
|
||||||
|
Duration? timeElapsed;
|
||||||
|
final statusCode = data["statusCode"] as int?;
|
||||||
|
final headers = data["headers"] as Map<String, String>?;
|
||||||
|
final requestHeaders = data["requestHeaders"] as Map<String, String>?;
|
||||||
|
final contentType = headers?[HttpHeaders.contentTypeHeader];
|
||||||
|
try {
|
||||||
|
mediaType = MediaType.parse(contentType!);
|
||||||
|
} catch (e) {
|
||||||
|
mediaType = null;
|
||||||
|
}
|
||||||
|
final body = data["body"] as String?;
|
||||||
|
final bodyBytes = data["bodyBytes"] as Uint8List?;
|
||||||
|
final time = data["time"] as int?;
|
||||||
|
if (time != null) {
|
||||||
|
timeElapsed = Duration(microseconds: time);
|
||||||
|
}
|
||||||
|
return ResponseModel(
|
||||||
|
statusCode: statusCode,
|
||||||
|
headers: headers,
|
||||||
|
requestHeaders: requestHeaders,
|
||||||
|
contentType: contentType,
|
||||||
|
mediaType: mediaType,
|
||||||
|
body: body,
|
||||||
|
formattedBody: formatBody(body, mediaType),
|
||||||
|
bodyBytes: bodyBytes,
|
||||||
|
time: timeElapsed,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return {
|
||||||
|
"statusCode": statusCode,
|
||||||
|
"headers": headers,
|
||||||
|
"requestHeaders": requestHeaders,
|
||||||
|
"body": body,
|
||||||
|
"bodyBytes": bodyBytes,
|
||||||
|
"time": time?.inMicroseconds,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return [
|
return [
|
||||||
"Response Status: $statusCode",
|
"Response Status: $statusCode",
|
||||||
"Response Time: $time",
|
"Response Time: $time",
|
||||||
"Response Headers: ${headers.toString()}",
|
"Response Headers: $headers",
|
||||||
"Response Request Headers: ${requestHeaders.toString()}",
|
"Response Request Headers: $requestHeaders",
|
||||||
|
"Response Content-Type: $contentType",
|
||||||
"Response Body: $body",
|
"Response Body: $body",
|
||||||
].join("\n");
|
].join("\n");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user