<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def wrap_json(func=None, *, encoder=json.JSONEncoder, preserve_raw_body=False):
 """ A middleware that parses the body of json requests and encodes the json responses. NOTE: this middleware exists just for backward compatibility, but it has some limitations in terms of response body encoding because it only accept list or dictionary outputs and json specification allows store other values also. It is recommended use the `wrap_json_body` and wrap_json_response` instead of this. """


    if func is None:
        return functools.partial(
            wrap_json,
            encoder=encoder,
            preserve_raw_body=preserve_raw_body
        )

    wrapped_func = wrap_json_body(func, preserve_raw_body=preserve_raw_body)
    wrapped_func = wrap_json_response(wrapped_func, encoder=encoder)
    return wrapped_func