github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/evsmtp/smtp_input.go (about)

     1  package evsmtp
     2  
     3  import (
     4  	"github.com/go-email-validator/go-email-validator/pkg/ev/evmail"
     5  	"time"
     6  )
     7  
     8  const (
     9  	// DefaultTimeoutConnection is timeout for connection
    10  	DefaultTimeoutConnection = 5 * time.Second
    11  	// DefaultTimeoutResponse is timeout for communication with smtp server
    12  	DefaultTimeoutResponse = 5 * time.Second
    13  )
    14  
    15  // Input describes data for Checker
    16  type Input interface {
    17  	Email() evmail.Address
    18  	Options
    19  }
    20  
    21  // Options describes smtp options
    22  type Options interface {
    23  	EmailFrom() evmail.Address
    24  	HelloName() string
    25  	Proxy() string
    26  	TimeoutConnection() time.Duration
    27  	TimeoutResponse() time.Duration
    28  	Port() int
    29  }
    30  
    31  // NewInput instantiates Input
    32  func NewInput(email evmail.Address, opts Options) Input {
    33  	if opts == nil {
    34  		opts = EmptyOptions()
    35  	}
    36  
    37  	return &input{
    38  		email:   email,
    39  		Options: opts,
    40  	}
    41  }
    42  
    43  type input struct {
    44  	email evmail.Address
    45  	Options
    46  }
    47  
    48  func (i *input) Email() evmail.Address {
    49  	return i.email
    50  }
    51  
    52  // OptionsDTO is dto for NewOptions
    53  type OptionsDTO struct {
    54  	EmailFrom   evmail.Address
    55  	HelloName   string
    56  	Proxy       string
    57  	TimeoutCon  time.Duration
    58  	TimeoutResp time.Duration
    59  	Port        int
    60  }
    61  
    62  var defaultOptions = NewOptions(OptionsDTO{
    63  	TimeoutCon:  DefaultTimeoutConnection,
    64  	TimeoutResp: DefaultTimeoutResponse,
    65  })
    66  
    67  // DefaultOptions returns options with default values
    68  func DefaultOptions() Options {
    69  	return defaultOptions
    70  }
    71  
    72  var emptyOptions = NewOptions(OptionsDTO{})
    73  
    74  // EmptyOptions returns empty options to avoid rewriting of default values
    75  func EmptyOptions() Options {
    76  	return emptyOptions
    77  }
    78  
    79  // NewOptions instantiates Options
    80  func NewOptions(dto OptionsDTO) Options {
    81  	return &options{
    82  		emailFrom:   dto.EmailFrom,
    83  		helloName:   dto.HelloName,
    84  		proxy:       dto.Proxy,
    85  		timeoutCon:  dto.TimeoutCon,
    86  		timeoutResp: dto.TimeoutResp,
    87  		port:        dto.Port,
    88  	}
    89  }
    90  
    91  type options struct {
    92  	emailFrom   evmail.Address
    93  	helloName   string
    94  	proxy       string
    95  	timeoutCon  time.Duration
    96  	timeoutResp time.Duration
    97  	port        int
    98  }
    99  
   100  func (i *options) EmailFrom() evmail.Address {
   101  	return i.emailFrom
   102  }
   103  func (i *options) HelloName() string {
   104  	return i.helloName
   105  }
   106  func (i *options) Proxy() string {
   107  	return i.proxy
   108  }
   109  func (i *options) TimeoutConnection() time.Duration {
   110  	return i.timeoutCon
   111  }
   112  func (i *options) TimeoutResponse() time.Duration {
   113  	return i.timeoutResp
   114  }
   115  func (i *options) Port() int {
   116  	return i.port
   117  }