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 }