package matchers

import (
	"reflect"

	"github.com/onsi/gomega/format"
)

type BeZeroMatcher struct {
}

func (matcher *BeZeroMatcher) Match(actual interface{}) (success bool, err error) {
	if actual == nil {
		return true, nil
	}
	zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface()

	return reflect.DeepEqual(zeroValue, actual), nil

}

func (matcher *BeZeroMatcher) FailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "to be zero-valued")
}

func (matcher *BeZeroMatcher) NegatedFailureMessage(actual interface{}) (message string) {
	return format.Message(actual, "not to be zero-valued")
}
