package http import "core:strings" Header :: struct { name: string, value: string, } headers_add :: proc(headers: ^[dynamic]Header, name, value: string) { append(headers, Header{name = strings.to_lower(name), value = strings.clone(strings.trim_space(value))}) } headers_get :: proc(headers: []Header, name: string) -> [dynamic]string { values := make([dynamic]string, 0, 2) for h in headers { if strings.equal_fold(h.name, name) { append(&values, h.value) } } return values } headers_get_first :: proc(headers: []Header, name: string) -> (string, bool) { for h in headers { if strings.equal_fold(h.name, name) { return h.value, true } } return "", false } header_has_token :: proc(headers: []Header, name, token: string) -> bool { v, ok := headers_get_first(headers, name) if !ok { return false } rest := v for part in strings.split_iterator(&rest, ",") { if strings.equal_fold(strings.trim_space(part), token) { return true } } return false }