class SummaryWithCallback extends CallbackMetric {

    @FunctionalInterface
    public interface Callback {
        void call(long count, double sum, Quantiles quantiles, String... labelValues);
    }

    private final Consumer<Callback> callback;

    private SummaryWithCallback(Builder builder) {
        super(builder);
        this.callback = builder.callback;
        if (callback == null) {
            throw new IllegalArgumentException("callback cannot be null");
        }
    }

    @Override
    public SummarySnapshot collect() {<FILL_FUNCTION_BODY>}

    public static Builder builder() {
        return new Builder(PrometheusProperties.get());
    }

    public static Builder builder(PrometheusProperties properties) {
        return new Builder(properties);
    }

    public static class Builder extends CallbackMetric.Builder<SummaryWithCallback.Builder, SummaryWithCallback> {

        private Consumer<Callback> callback;

        public Builder callback(Consumer<Callback> callback) {
            this.callback = callback;
            return self();
        }

        private Builder(PrometheusProperties properties) {
            super(Collections.singletonList("quantile"), properties);
        }

        @Override
        public SummaryWithCallback build() {
            return new SummaryWithCallback(this);
        }

        @Override
        protected Builder self() {
            return this;
        }
    }
}

        List<SummarySnapshot.SummaryDataPointSnapshot> dataPoints = new ArrayList<>();
        callback.accept((count, sum, quantiles, labelValues) -> {
            dataPoints.add(new SummarySnapshot.SummaryDataPointSnapshot(count, sum, quantiles, makeLabels(labelValues), Exemplars.EMPTY, 0L));
        });
        return new SummarySnapshot(getMetadata(), dataPoints);
    
<no_super_class>