@Suppress("UNCHECKED_CAST") interface HasHeaders { val headers: MutableList fun getHeader(key: Header): String? { return headers.find { it.first == key }?.second } // if value is null, then the header does not get set fun setHeader(key: Header, value: String?): T { if (value == null) return this as T removeHeader(key) appendHeader(key, value) return this as T } // if value is null, then the header does not get set fun appendHeader(key: Header, value: String?): T { if (value == null) return this as T headers.add(key to value) return this as T } fun removeHeader(key: Header): T { headers.removeIf { it.first == key } return this as T } } class Request(): HasHeaders class Response(): HasHeaders