property<T> function

PropertyAccessor<T> property<T>(
  1. dynamic path
)

Creates a property accessor function based on the provided path.

Creates a function that accesses properties of objects of type T based on the specified path. The path can be either a string representing a property name or a list of strings representing nested property names.

Returns a PropertyAccessor<T> function that can be used to access properties of objects of type T.

Throws an ArgumentError if the path is not a valid type (either a string or a list of strings).

Example:

var accessor1 = property<MyClass>('propertyName');
var accessor2 = property<MyClass>(['nested', 'propertyName']);
var myObject = MyClass(propertyName: 'value', nested: {'propertyName': 'nestedValue'});
var value1 = accessor1(myObject); // Returns 'value'
var value2 = accessor2(myObject); // Returns 'nestedValue'

Implementation

PropertyAccessor<T> property<T>(dynamic path) {
  if (path is String) {
    List<String> properties = path.split('.');
    return (T object) {
      dynamic result = object;
      for (var prop in properties) {
        if (result is Map<String, dynamic>) {
          result = result[prop];
        } else {
          return null;
        }
      }
      return result;
    };
  } else if (path is List<String>) {
    return (T object) {
      dynamic result = object;
      for (var prop in path) {
        if (result is Map<String, dynamic>) {
          result = result[prop];
        } else {
          return null;
        }
      }
      return result;
    };
  } else {
    throw ArgumentError(
        'Invalid path type. Must be either String or List<String>.');
  }
}