func NewDialer()

in dialer.go [191:269]


func NewDialer(ctx context.Context, opts ...Option) (*Dialer, error) {
	cfg := &dialerConfig{
		refreshTimeout: alloydb.RefreshTimeout,
		dialFunc:       proxy.Dial,
		logger:         nullLogger{},
		userAgents:     []string{userAgent},
	}
	for _, opt := range opts {
		opt(cfg)
		if cfg.err != nil {
			return nil, cfg.err
		}
	}
	if cfg.disableMetadataExchange && cfg.useIAMAuthN {
		return nil, errors.New("incompatible options: WithOptOutOfAdvancedConnection " +
			"check cannot be used with WithIAMAuthN")
	}
	userAgent := strings.Join(cfg.userAgents, " ")
	// Add user agent to the end to make sure it's not overridden.
	cfg.clientOpts = append(cfg.clientOpts, option.WithUserAgent(userAgent))

	// If no token source is configured, use ADC's token source.
	ts := cfg.tokenSource
	if ts == nil {
		var err error
		ts, err = google.DefaultTokenSource(ctx, CloudPlatformScope)
		if err != nil {
			return nil, err
		}
	}

	cOpts := append(cfg.alloydbClientOpts, cfg.clientOpts...)
	client, err := alloydbadmin.NewAlloyDBAdminRESTClient(ctx, cOpts...)
	if err != nil {
		return nil, fmt.Errorf("failed to create AlloyDB Admin API client: %v", err)
	}

	dialCfg := dialCfg{
		ipType:       alloydb.PrivateIP,
		tcpKeepAlive: defaultTCPKeepAlive,
	}
	for _, opt := range cfg.dialOpts {
		opt(&dialCfg)
	}

	if err := tel.InitMetrics(); err != nil {
		return nil, err
	}
	dialerID := uuid.New().String()
	g, err := newKeyGenerator(cfg.rsaKey, cfg.lazyRefresh,
		func() (*rsa.PrivateKey, error) {
			return rsa.GenerateKey(rand.Reader, 2048)
		})
	if err != nil {
		return nil, err
	}
	d := &Dialer{
		closed:                  make(chan struct{}),
		cache:                   make(map[alloydb.InstanceURI]monitoredCache),
		lazyRefresh:             cfg.lazyRefresh,
		disableMetadataExchange: cfg.disableMetadataExchange,
		disableBuiltInMetrics:   cfg.disableBuiltInTelemetry,
		staticConnInfo:          cfg.staticConnInfo,
		keyGenerator:            g,
		refreshTimeout:          cfg.refreshTimeout,
		client:                  client,
		clientOpts:              cfg.clientOpts,
		logger:                  cfg.logger,
		defaultDialCfg:          dialCfg,
		dialerID:                dialerID,
		metricRecorders:         map[alloydb.InstanceURI]telv2.MetricRecorder{},
		dialFunc:                cfg.dialFunc,
		useIAMAuthN:             cfg.useIAMAuthN,
		iamTokenSource:          ts,
		userAgent:               userAgent,
		buffer:                  newBuffer(),
	}
	return d, nil
}