Skip to content

Instantly share code, notes, and snippets.

@vadzappa
Created May 15, 2020 13:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vadzappa/0e4efda09117b83630a28bd0ef5b66f4 to your computer and use it in GitHub Desktop.
Save vadzappa/0e4efda09117b83630a28bd0ef5b66f4 to your computer and use it in GitHub Desktop.
package main
import (
"context"
"time"
"github.com/pipedrive/fastis-packages/asyncutil"
"github.com/pkg/errors"
)
type config struct {
}
func buildConfig() (*config, error) {
ctx := context.Background()
var accessToken string
var refreshToken string
var r asyncutil.Race
r.Run(
ctx,
func(ctx context.Context) error {
_, err := asyncutil.RetryUntilSucceed(ctx, func() (interface{}, error) {
t, err := fetchAccessToken()
if err != nil {
return nil, err
}
accessToken = t
return nil, nil
}, time.Millisecond*500)
return err
},
func(ctx context.Context) error {
_, err := asyncutil.RetryUntilSucceed(ctx, func() (interface{}, error) {
t, err := fetchRefreshToken()
if err != nil {
return nil, err
}
refreshToken = t
return nil, nil
}, time.Millisecond*500)
return err
},
)
if refreshToken != "" {
return configFromRefreshToken(accessToken)
}
if accessToken != "" {
return configFromAccessToken(accessToken)
}
return nil, errors.New("oopsie")
}
func configFromAccessToken(token string) (*config, error) {
return &config{}, nil
}
func configFromRefreshToken(token string) (*config, error) {
return &config{}, nil
}
func fetchAccessToken() (string, error) {
return "", nil
}
func fetchRefreshToken() (string, error) {
return "", nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment