github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/presentation/check-if-email-exist/availability.go (about)

     1  package checkifemailexist
     2  
     3  // FuncAvailability is an interface to calculate availability
     4  type FuncAvailability func(depPresentation DepPresentation) Availability
     5  
     6  // Availability is a type
     7  type Availability string
     8  
     9  func (a Availability) String() string {
    10  	return string(a)
    11  }
    12  
    13  // Availability constants
    14  const (
    15  	Risky   Availability = "risky"
    16  	Invalid Availability = "invalid"
    17  	Safe    Availability = "safe"
    18  	Unknown Availability = "unknown"
    19  )
    20  
    21  // CalculateAvailability calculates availability status
    22  func CalculateAvailability(depPresentation DepPresentation) Availability {
    23  	if depPresentation.Misc.IsDisposable ||
    24  		depPresentation.Misc.IsRoleAccount ||
    25  		depPresentation.SMTP.IsCatchAll ||
    26  		depPresentation.SMTP.HasFullInbox {
    27  		return Risky
    28  	}
    29  
    30  	if !depPresentation.SMTP.IsDeliverable ||
    31  		!depPresentation.SMTP.CanConnectSMTP ||
    32  		depPresentation.SMTP.IsDisabled {
    33  		return Invalid
    34  	}
    35  	return Safe
    36  	/*
    37  		TODO run rust code to understand when Unknown should be used
    38  		return Unknown
    39  	*/
    40  }