package tc.oc.commons.core.inspect; import java.util.Collection; import java.util.Map; import java.util.stream.Stream; import javax.annotation.Nullable; import tc.oc.commons.core.util.Chain; public interface Inspector<R> { R scalar(@Nullable Object value, Inspection options); <E> R collection(Collection<E> collection, Stream<R> elements, Inspection options); <K, V> R map(Map<K, V> map, Stream<Map.Entry<R, R>> entries, Inspection options); R reference(Inspectable inspectable, Inspection options); R inspectable(Inspectable inspectable, Stream<Map.Entry<String, R>> properties, Inspection options); R exception(InspectionException e, Inspection options); R cycle(Object value, Chain<Object> path, Inspection options); }