code: func readTokenFile(ctx context.Context, path string) (*tokenserver.TokenFile, *stateInToken) {
  	blob, err := ioutil.ReadFile(path)
  	if err != nil {
  		if !os.IsNotExist(err) {
  			logging.Warningf(ctx, "Failed to read token file from %q - %s", path, err)
  		}
  		return &tokenserver.TokenFile{}, &stateInToken{}
  	}
  	out := &tokenserver.TokenFile{}
  	if err = jsonpb.Unmarshal(bytes.NewReader(blob), out); err != nil {
  		logging.Warningf(ctx, "Failed to unmarshal token file %q - %s", path, err)
  		return &tokenserver.TokenFile{}, &stateInToken{}
  	}
  	// Attempt to decode stateInToken. Ignore if doesn't work, no big deal.
  	state := &stateInToken{}
  	if err = json.Unmarshal(out.TokendState, state); err != nil {
  		logging.Warningf(ctx, "Failed to unmarshal tokend_state - %s", err)
  		*state = stateInToken{}
  	}
  	return out, state
  }
docs: // readTokenFile reads the token file from disk.
  //
  // In case of problems, logs errors and returns default structs.