code: func (c *DiskTokenCache) PutToken(key *CacheKey, tok *Token) error {
  	token := tok.Token
  	if !token.Expiry.IsZero() {
  		token.Expiry = token.Expiry.UTC()
  	}
  	return c.updateCacheFile(func(cache *cacheFile, now time.Time) bool {
  		for _, entry := range cache.Cache {
  			if EqualCacheKeys(&entry.Key, key) {
  				entry.Token = token
  				entry.Email = tok.Email
  				entry.LastUpdate = now
  				return true
  			}
  		}
  		cache.Cache = append(cache.Cache, &cacheFileEntry{
  			Key:        *key,
  			Token:      token,
  			Email:      tok.Email,
  			LastUpdate: now,
  		})
  		return true
  	})
  }
docs: // PutToken writes the token to cache.