code: func (a *ACL) GetPolicy(args *structs.ACLPolicyResolveLegacyRequest, reply *structs.ACLPolicyResolveLegacyResponse) error {
  	if done, err := a.srv.forward("ACL.GetPolicy", args, args, reply); done {
  		return err
  	}
  
  	// Verify we are allowed to serve this request
  	if a.srv.config.ACLDatacenter != a.srv.config.Datacenter {
  		return acl.ErrDisabled
  	}
  
  	// Get the policy via the cache
  	parent := a.srv.config.ACLDefaultPolicy
  
  	policy, err := a.srv.acls.GetMergedPolicyForToken(args.ACL)
  	if err != nil {
  		return err
  	}
  
  	// translates the structures internals to most closely match what could be expressed in the original rule language
  	policy = policy.ConvertToLegacy()
  
  	// Generate an ETag
  	etag := makeACLETag(parent, policy)
  
  	// Setup the response
  	reply.ETag = etag
  	reply.TTL = a.srv.config.ACLTokenTTL
  	a.srv.setQueryMeta(&reply.QueryMeta)
  
  	// Only send the policy on an Etag mis-match
  	if args.ETag != etag {
  		reply.Parent = parent
  		reply.Policy = policy
  	}
  	return nil
  }
docs: // GetPolicy is used to retrieve a compiled policy object with a TTL. Does not
  // support a blocking query.