errors.go raw

   1  package certificate
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  )
   7  
   8  type obtainError struct {
   9  	data map[string]error
  10  }
  11  
  12  func newObtainError() *obtainError {
  13  	return &obtainError{data: make(map[string]error)}
  14  }
  15  
  16  func (e *obtainError) Add(domain string, err error) {
  17  	e.data[domain] = err
  18  }
  19  
  20  func (e *obtainError) Join() error {
  21  	if e == nil {
  22  		return nil
  23  	}
  24  
  25  	if len(e.data) == 0 {
  26  		return nil
  27  	}
  28  
  29  	var err error
  30  	for d, e := range e.data {
  31  		err = errors.Join(err, fmt.Errorf("%s: %w", d, e))
  32  	}
  33  
  34  	return fmt.Errorf("error: one or more domains had a problem:\n%w", err)
  35  }
  36  
  37  type domainError struct {
  38  	Domain string
  39  	Error  error
  40  }
  41