///|
pub fn encode(header : ProxyHeader) -> Result[Bytes, ProxyError] {
  match header.version {
    V1 => encode_v1(header)
    V2 => encode_v2(header)
  }
}

///|
pub fn encode_with_payload(
  header : ProxyHeader,
  payload : Bytes,
) -> Result[Bytes, ProxyError] {
  match encode(header) {
    Err(err) => Err(err)
    Ok(prefix) => Ok(bytes_concat(prefix, payload))
  }
}