| 123456789101112131415161718192021222324252627 |
- package awsutil
- import (
- "reflect"
- )
- // DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.
- // In addition to this, this method will also dereference the input values if
- // possible so the DeepEqual performed will not fail if one parameter is a
- // pointer and the other is not.
- //
- // DeepEqual will not perform indirection of nested values of the input parameters.
- func DeepEqual(a, b interface{}) bool {
- ra := reflect.Indirect(reflect.ValueOf(a))
- rb := reflect.Indirect(reflect.ValueOf(b))
- if raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid {
- // If the elements are both nil, and of the same type the are equal
- // If they are of different types they are not equal
- return reflect.TypeOf(a) == reflect.TypeOf(b)
- } else if raValid != rbValid {
- // Both values must be valid to be equal
- return false
- }
- return reflect.DeepEqual(ra.Interface(), rb.Interface())
- }
|