desc: Describes a single HTTP method of a URI
        args:
            -   name: method
                type: str
                desc: The HTTP request method to use
            -   name: description
                type: str
                desc: The description of what this call does
                required: false
                default: ""
            -   name: request_example
                type: dict
                desc: An example JSON request body
                required: false
                default: null
            -   name: request_ctor
                type: method
                desc: Docstring will be parsed into help for @request_example
                required: false
                default: null
            -   name: responses
                type: list
                subtypes: [RouteMethodResponse]
                desc: >
                    Each object describes a possible response and describes
                    the condition(s) that may cause it
                ctor: pymarshal.api_docs.routes.RouteMethodResponse.__init__
            -   name: method_choices
                type: list
                subtypes: ["str"]
                desc: The HTTP methods to allow for @method
                hide: true
                required: false
                default: [DELETE, GET, PATCH, POST, PUT]

def factory(
        method,
        description="",
        request_example=None,
        request_ctor=None,
        responses=None,
        method_choices=HTTP_METHODS,
    ):
        """
        desc: Describes a single HTTP method of a URI
        args:
            -   name: method
                type: str
                desc: The HTTP request method to use
            -   name: description
                type: str
                desc: The description of what this call does
                required: false
                default: ""
            -   name: request_example
                type: dict
                desc: An example JSON request body
                required: false
                default: null
            -   name: request_ctor
                type: method
                desc: Docstring will be parsed into help for @request_example
                required: false
                default: null
            -   name: responses
                type: list
                subtypes: [RouteMethodResponse]
                desc: >
                    Each object describes a possible response and describes
                    the condition(s) that may cause it
                ctor: pymarshal.api_docs.routes.RouteMethodResponse.__init__
            -   name: method_choices
                type: list
                subtypes: ["str"]
                desc: The HTTP methods to allow for @method
                hide: true
                required: false
                default: [DELETE, GET, PATCH, POST, PUT]
        """
        return RouteMethod(
            method,
            description,
            request_example,
            DocString.from_ctor(request_ctor) if request_ctor else None,
            responses,
            method_choices,
        )