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
}