org.zalando.logbook.DefaultHttpHeaders Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of logbook-api Show documentation
Show all versions of logbook-api Show documentation
HTTP request and response logging
package org.zalando.logbook;
import lombok.AllArgsConstructor;
import lombok.With;
import lombok.experimental.Delegate;
import org.organicdesign.fp.collections.ImList;
import org.organicdesign.fp.collections.ImSortedMap;
import org.organicdesign.fp.collections.PersistentTreeMap;
import java.util.AbstractList;
import java.util.AbstractMap;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static lombok.AccessLevel.PRIVATE;
import static org.organicdesign.fp.collections.PersistentVector.ofIter;
import static org.zalando.logbook.Fold.fold;
@SuppressWarnings("deprecation") // needed because of @Delegate and @Deprecated
@AllArgsConstructor(access = PRIVATE)
final class DefaultHttpHeaders
// gives us a meaningful equals, hashCode and toString
extends AbstractMap>
implements UpdateHttpHeaders, ApplyHttpHeaders, DeleteHttpHeaders {
static final HttpHeaders EMPTY = new DefaultHttpHeaders();
@With
private final ImSortedMap> headers;
private DefaultHttpHeaders() {
this(PersistentTreeMap.empty(String.CASE_INSENSITIVE_ORDER));
}
@Delegate
@SuppressWarnings("unused")
private Map> delegate() {
return headers;
}
@Override
public HttpHeaders update(
final String name,
final Collection values) {
return withHeaders(
headers.assoc(name, immutableCopy(values)));
}
@Override
public HttpHeaders delete(final Collection names) {
return withHeaders(
fold(names, headers, ImSortedMap::without));
}
public static List immutableCopy(final Collection values) {
if (values instanceof ImListWithToString) {
return (List) values;
}
return new ImListWithToString<>(ofIter(values));
}
@AllArgsConstructor
private static final class ImListWithToString extends AbstractList {
private final ImList list;
@Delegate
@SuppressWarnings("unused")
private List delegate() {
return list;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy