func New()

in client/client.go [373:425]


func New(ctx context.Context, args Args, options ...Option) (*ARN, error) {
	a := &ARN{
		errs:            make(chan error, 1),
		sigSenderClosed: make(chan struct{}),
	}

	for _, o := range options {
		if err := o(a); err != nil {
			return nil, err
		}
	}
	if a.in == nil {
		a.in = make(chan models.Notifications, 1)
	}

	args.logger = a.logger

	var h *http.Client
	var s *storage.Client
	if a.fakeSender == nil {
		var err error
		h, s, err = args.toClients()
		if err != nil {
			return nil, fmt.Errorf("problem getting clients: %v", err)
		}
	} else {
		var err error
		h, err = http.New("", nil, nil, http.WithFake(a.fakeSender))
		if err != nil {
			return nil, fmt.Errorf("problem getting clients: %v", err)
		}
		s, err = storage.New("", nil, storage.WithFake(a.fakeUploader))
		if err != nil {
			return nil, fmt.Errorf("problem getting clients: %v", err)
		}
	}

	var err error
	a.conn, err = conn.New(h, s, a.errs, conn.WithLogger(a.logger))
	if err != nil {
		return nil, fmt.Errorf("problem with conn client: %v", err)
	}

	if a.meterProvider != nil {
		if err := modelmetrics.Init(a.meterProvider.Meter("arn")); err != nil {
			return nil, err
		}
	}

	go a.sender()

	return a, nil
}