///|
pub(all) enum ProxyErrorKind {
  NeedMoreData
  InvalidPrefix
  UnsupportedVersion
  InvalidCommand
  InvalidFamily
  InvalidTransport
  InvalidFamilyTransport
  InvalidV1Line
  V1LineTooLong
  MissingCrlf
  InvalidIpv4
  InvalidIpv6
  InvalidPort
  InvalidV2Signature
  InvalidLength
  HeaderTooLarge
  TruncatedAddress
  TruncatedTlv
  InvalidTlv
  DuplicateCrc32c
  MissingCrc32c
  Crc32cMismatch
  InvalidSslTlv
  PolicyViolation
  DecoderAlreadyFinished
  DecoderFailed
} derive(Eq, Debug)

///|
pub(all) struct ProxyError {
  kind : ProxyErrorKind
  offset : Int
  context : String
} derive(Debug)

///|
pub fn proxy_error(
  kind : ProxyErrorKind,
  offset : Int,
  context : String,
) -> ProxyError {
  { kind, offset, context }
}