func MatchResponse(expected, actual *provider.Response) (diff.Differences, error) {
	diffs := make(diff.Differences, 0)

	if res, sDiff := diff.DeepDiff(expected.Status, actual.Status,
		&diff.DiffConfig{AllowUnexpectedKeys: true, RootPath: "[\"status\"]"}); !res {
		diffs = append(diffs, sDiff...)
	} else if res, hDiff := headerMatches(expected.Headers, actual.Headers); !res {
		diffs = append(diffs, hDiff...)
	} else if res, bDiff, err := bodyMatches(expected.GetBody(), actual.GetBody(), true, expected.BodyHasToBeSerialized()); err != nil {
		return nil, err
	} else if !res {
		diffs = append(diffs, bDiff...)
	}

	return diffs, nil
}