// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "quiche/http2/hpack/decoder/hpack_decoding_error.h"

namespace http2 {

// static
absl::string_view HpackDecodingErrorToString(HpackDecodingError error) {
  switch (error) {
    case HpackDecodingError::kOk:
      return "No error detected";
    case HpackDecodingError::kIndexVarintError:
      return "Index varint beyond implementation limit";
    case HpackDecodingError::kNameLengthVarintError:
      return "Name length varint beyond implementation limit";
    case HpackDecodingError::kValueLengthVarintError:
      return "Value length varint beyond implementation limit";
    case HpackDecodingError::kNameTooLong:
      return "Name length exceeds buffer limit";
    case HpackDecodingError::kValueTooLong:
      return "Value length exceeds buffer limit";
    case HpackDecodingError::kNameHuffmanError:
      return "Name Huffman encoding error";
    case HpackDecodingError::kValueHuffmanError:
      return "Value Huffman encoding error";
    case HpackDecodingError::kMissingDynamicTableSizeUpdate:
      return "Missing dynamic table size update";
    case HpackDecodingError::kInvalidIndex:
      return "Invalid index in indexed header field representation";
    case HpackDecodingError::kInvalidNameIndex:
      return "Invalid index in literal header field with indexed name "
             "representation";
    case HpackDecodingError::kDynamicTableSizeUpdateNotAllowed:
      return "Dynamic table size update not allowed";
    case HpackDecodingError::kInitialDynamicTableSizeUpdateIsAboveLowWaterMark:
      return "Initial dynamic table size update is above low water mark";
    case HpackDecodingError::kDynamicTableSizeUpdateIsAboveAcknowledgedSetting:
      return "Dynamic table size update is above acknowledged setting";
    case HpackDecodingError::kTruncatedBlock:
      return "Block ends in the middle of an instruction";
    case HpackDecodingError::kFragmentTooLong:
      return "Incoming data fragment exceeds buffer limit";
    case HpackDecodingError::kCompressedHeaderSizeExceedsLimit:
      return "Total compressed HPACK data size exceeds limit";
  }
  return "invalid HpackDecodingError value";
}

}  // namespace http2
