public static Stream<Property> list(final PathValue<?> root) {
		if (root == null || root.value() == null) {
			return Stream.empty();
		}

		final var type = PathValue.<Type>of(root.value().getClass());
		final var descriptions = Descriptions.list(type);

		return descriptions
			.flatMap(description -> list(root, description));
	}
This method extracts the direct properties of the given {@code root}
object.

{@snippet class="PropertySnippets" region="list(PathValue)"}

The code snippet above will create the following output
<pre>{@code
SimpleProperty[path=author.forename, value=Jonathan, mutable=false, type=java.lang.String, enclosure=Author]
SimpleProperty[path=author.surname, value=Franzen, mutable=false, type=java.lang.String, enclosure=Author]
SimpleProperty[path=author.birthDate, value=1959-08-17, mutable=false, type=java.time.LocalDate, enclosure=Author]
ListProperty[path=author.books, value=[], mutable=false, type=java.util.List, enclosure=Author]
}</pre>

@param root the root object from which the properties are extracted
@return all direct properties of the given {@code root} object
jenetics.incubator/src/main/java/io/jenetics/incubator/beans/property/Properties.java