package halalcloud import "google.golang.org/grpc" func defaultOptions() halalOptions { return halalOptions{ // onRefreshTokenRefreshed: func(string) {}, grpcOptions: []grpc.DialOption{ grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(1024 * 1024 * 32)), // grpc.WithMaxMsgSize(1024 * 1024 * 1024), }, } } type HalalOption interface { apply(*halalOptions) } // halalOptions configure a RPC call. halalOptions are set by the HalalOption // values passed to Dial. type halalOptions struct { onTokenRefreshed func(accessToken string, accessTokenExpiredAt int64, refreshToken string, refreshTokenExpiredAt int64) grpcOptions []grpc.DialOption } // funcDialOption wraps a function that modifies halalOptions into an // implementation of the DialOption interface. type funcDialOption struct { f func(*halalOptions) } func (fdo *funcDialOption) apply(do *halalOptions) { fdo.f(do) } func newFuncDialOption(f func(*halalOptions)) *funcDialOption { return &funcDialOption{ f: f, } } func WithRefreshTokenRefreshedCallback(s func(accessToken string, accessTokenExpiredAt int64, refreshToken string, refreshTokenExpiredAt int64)) HalalOption { return newFuncDialOption(func(o *halalOptions) { o.onTokenRefreshed = s }) } func WithGrpcDialOptions(opts ...grpc.DialOption) HalalOption { return newFuncDialOption(func(o *halalOptions) { o.grpcOptions = opts }) }