func RegisterEqual()

in isdef/core.go [58:83]


func RegisterEqual(fn interface{}) error {
	fnV := reflect.ValueOf(fn)
	fnT := fnV.Type()

	if fnT.Kind() != reflect.Func {
		return InvalidEqualFnError{"Provided value is not a function"}
	}
	if fnT.NumIn() != 1 {
		return InvalidEqualFnError{"Equal FN should take one argument"}
	}
	if fnT.NumOut() != 1 {
		return InvalidEqualFnError{"Equal FN should return one value"}
	}
	if fnT.Out(0) != reflect.TypeOf(IsDef{}) {
		return InvalidEqualFnError{"Equal FN should return an IsDef"}
	}

	inT := fnT.In(0)
	if _, ok := equalChecks[inT]; ok {
		return InvalidEqualFnError{fmt.Sprintf("Duplicate Equal FN for type %v encountered!", inT)}
	}

	equalChecks[inT] = fnV

	return nil
}