Creates a new token with a given policy

        Parameters:
            token (Object): Token specification
        Returns:
            Object: token ID

        The create endpoint is used to make a new token.
        A token has a name, a type, and a set of ACL rules.

        The request body may take the form::

            {
                "Name": "my-app-token",
                "Type": "client",
                "Rules": ""
            }

        None of the fields are mandatory. The **Name** and **Rules** fields
        default to being blank, and the **Type** defaults to "client".

        **Name** is opaque to Consul. To aid human operators, it should
        be a meaningful indicator of the ACL's purpose.

        **Type** is either **client** or **management**. A management token
        is comparable to a root user and has the ability to perform any action
        including creating, modifying and deleting ACLs.

        **ID** field may be provided, and if omitted a random UUID will be
        generated.

        The format of **Rules** is
        `documented here <https://www.consul.io/docs/internals/acl.html>`_.

        A successful response body will return the **ID** of the newly
        created ACL, like so::

            {
                "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e"
            }

async def create(self, token):
        """Creates a new token with a given policy

        Parameters:
            token (Object): Token specification
        Returns:
            Object: token ID

        The create endpoint is used to make a new token.
        A token has a name, a type, and a set of ACL rules.

        The request body may take the form::

            {
                "Name": "my-app-token",
                "Type": "client",
                "Rules": ""
            }

        None of the fields are mandatory. The **Name** and **Rules** fields
        default to being blank, and the **Type** defaults to "client".

        **Name** is opaque to Consul. To aid human operators, it should
        be a meaningful indicator of the ACL's purpose.

        **Type** is either **client** or **management**. A management token
        is comparable to a root user and has the ability to perform any action
        including creating, modifying and deleting ACLs.

        **ID** field may be provided, and if omitted a random UUID will be
        generated.

        The format of **Rules** is
        `documented here <https://www.consul.io/docs/internals/acl.html>`_.

        A successful response body will return the **ID** of the newly
        created ACL, like so::

            {
                "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e"
            }
        """
        token = encode_token(token)
        response = await self._api.put("/v1/acl/create", data=token)
        return response.body