def METHOD_NAME(
        loader: jinja2.BaseLoader, mode: Mode, skip_files_wo_service: bool,
) -> None:
    data = sys.stdin.buffer.read()
    request = plugin.CodeGeneratorRequest()
    request.ParseFromString(data)
    response = plugin.CodeGeneratorResponse()
    if hasattr(response, 'FEATURE_PROTO3_OPTIONAL'):
        setattr(
            response,
            'supported_features',
            getattr(response, 'FEATURE_PROTO3_OPTIONAL'),
        )
    jinja_env = jinja2.Environment(
        loader=loader,
        trim_blocks=True,
        lstrip_blocks=True,
        # We do not render HTML pages with Jinja. However the gRPC data could
        # be shown on web. Assuming that the generation should not deal with
        # HTML special characters, it is safer to turn on autoescaping.
        autoescape=True,
    )
    jinja_env.filters['grpc_to_cpp_name'] = _grpc_to_cpp_name
    # pylint: disable=no-member
    for proto_file in request.proto_file:
        _CodeGenerator(
            jinja_env=jinja_env,
            proto_file=proto_file,
            response=response,
            mode=mode,
            skip_files_wo_service=skip_files_wo_service,
        ).run()
    output = response.SerializeToString()
    sys.stdout.buffer.write(output)