code: func (a *ACL) TokenClone(tokenID string, description string, q *WriteOptions) (*ACLToken, *WriteMeta, error) {
  	if tokenID == "" {
  		return nil, nil, fmt.Errorf("Must specify a tokenID for Token Cloning")
  	}
  
  	r := a.c.newRequest("PUT", "/v1/acl/token/"+tokenID+"/clone")
  	r.setWriteOptions(q)
  	r.obj = struct{ Description string }{description}
  	rtt, resp, err := requireOK(a.c.doRequest(r))
  	if err != nil {
  		return nil, nil, err
  	}
  	defer resp.Body.Close()
  
  	wm := &WriteMeta{RequestTime: rtt}
  	var out ACLToken
  	if err := decodeBody(resp, &out); err != nil {
  		return nil, nil, err
  	}
  
  	return &out, wm, nil
  }
docs: // TokenClone will create a new token with the same policies and locality as the original
  // token but will have its own auto-generated AccessorID and SecretID as well having the
  // description passed to this function. The tokenID parameter must be a valid Accessor ID
  // of an existing token.