github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/validator_dep_builder.go (about) 1 package ev 2 3 import ( 4 "github.com/emirpasic/gods/sets/hashset" 5 "github.com/go-email-validator/go-email-validator/pkg/ev/contains" 6 "github.com/go-email-validator/go-email-validator/pkg/ev/disposable" 7 "github.com/go-email-validator/go-email-validator/pkg/ev/evsmtp" 8 "github.com/go-email-validator/go-email-validator/pkg/ev/role" 9 ) 10 11 // GetDefaultSMTPValidator instantiates default SMTPValidatorName 12 func GetDefaultSMTPValidator(dto evsmtp.CheckerDTO) Validator { 13 return NewWarningsDecorator( 14 NewSMTPValidator(evsmtp.NewChecker(dto)), 15 NewIsWarning(hashset.New(evsmtp.RandomRCPTStage), func(warningMap WarningSet) IsWarning { 16 return func(err error) bool { 17 errSMTP, ok := err.(evsmtp.Error) 18 if !ok { 19 return false 20 } 21 return warningMap.Contains(errSMTP.Stage()) 22 } 23 }), 24 ) 25 } 26 27 // GetDefaultFactories returns default list ValidatorMap 28 func GetDefaultFactories() ValidatorMap { 29 return ValidatorMap{ 30 RoleValidatorName: NewRoleValidator(role.NewRBEASetRole()), 31 DisposableValidatorName: NewDisposableValidator(contains.NewFunc(disposable.MailChecker)), 32 SyntaxValidatorName: NewSyntaxValidator(), 33 MXValidatorName: DefaultNewMXValidator(), 34 SMTPValidatorName: GetDefaultSMTPValidator(evsmtp.CheckerDTO{}), 35 } 36 } 37 38 // NewDepBuilder instantiates Validator with ValidatorMap or GetDefaultFactories validators 39 func NewDepBuilder(validators ValidatorMap) *DepBuilder { 40 if validators == nil { 41 validators = GetDefaultFactories() 42 } 43 44 return &DepBuilder{validators: validators} 45 } 46 47 // DepBuilder is used to form Validator 48 type DepBuilder struct { 49 validators ValidatorMap 50 } 51 52 // Set sets validator by ValidatorName 53 func (d *DepBuilder) Set(name ValidatorName, validator Validator) *DepBuilder { 54 d.validators[name] = validator 55 56 return d 57 } 58 59 // Get returns validator by ValidatorName 60 func (d *DepBuilder) Get(name ValidatorName) Validator { 61 if d.Has(name) { 62 return d.validators[name] 63 } 64 65 return nil 66 } 67 68 // Has checks for existing validators by ValidatorName... 69 func (d *DepBuilder) Has(names ...ValidatorName) bool { 70 for _, name := range names { 71 if _, has := d.validators[name]; !has { 72 return false 73 } 74 } 75 76 return true 77 } 78 79 // Delete deletes validators by ValidatorName... 80 func (d *DepBuilder) Delete(names ...ValidatorName) *DepBuilder { 81 for _, name := range names { 82 if d.Has(name) { 83 delete(d.validators, name) 84 } 85 } 86 87 return d 88 } 89 90 // Build builds Validator based on configuration 91 func (d *DepBuilder) Build() Validator { 92 return NewDepValidator(d.validators) 93 }