public static <T> Supplier<WeakValue<T>> supplied(Supplier<? extends T> supplier) {
        Objects.requireNonNull(supplier, "supplier");

        return () -> {
            T value = supplier.get();
            Objects.requireNonNull(value, "value");

            return new WeakValue<>(value);
        };
    }
Represents a value wrapped in a {@link WeakReference}

@param <T> the wrapped value type
helper/src/main/java/me/lucko/helper/metadata/WeakValue.java