package types

import (
	
	
)

// ErrValidationEmail is the sentinel error returned when an email fails validation
var ErrValidationEmail = errors.New("email: failed to pass regex validation")

// Email represents an email address.
// It is a string type that must pass regex validation before being marshalled
// to JSON or unmarshalled from JSON.
type Email string

func ( Email) () ([]byte, error) {
	if !emailRegex.MatchString(string()) {
		return nil, ErrValidationEmail
	}

	return json.Marshal(string())
}

func ( *Email) ( []byte) error {
	if  == nil {
		return nil
	}

	var  string
	if  := json.Unmarshal(, &);  != nil {
		return 
	}

	* = Email()
	if !emailRegex.MatchString() {
		return ErrValidationEmail
	}

	return nil
}