#ifndef QUICHE_QUIC_CORE_FRAMES_QUIC_FRAME_H_
#define QUICHE_QUIC_CORE_FRAMES_QUIC_FRAME_H_
#include <cstddef>
#include <ostream>
#include <string>
#include <type_traits>
#include "absl/container/inlined_vector.h"
#include "quiche/quic/core/frames/quic_ack_frame.h"
#include "quiche/quic/core/frames/quic_ack_frequency_frame.h"
#include "quiche/quic/core/frames/quic_blocked_frame.h"
#include "quiche/quic/core/frames/quic_connection_close_frame.h"
#include "quiche/quic/core/frames/quic_crypto_frame.h"
#include "quiche/quic/core/frames/quic_goaway_frame.h"
#include "quiche/quic/core/frames/quic_handshake_done_frame.h"
#include "quiche/quic/core/frames/quic_max_streams_frame.h"
#include "quiche/quic/core/frames/quic_message_frame.h"
#include "quiche/quic/core/frames/quic_mtu_discovery_frame.h"
#include "quiche/quic/core/frames/quic_new_connection_id_frame.h"
#include "quiche/quic/core/frames/quic_new_token_frame.h"
#include "quiche/quic/core/frames/quic_padding_frame.h"
#include "quiche/quic/core/frames/quic_path_challenge_frame.h"
#include "quiche/quic/core/frames/quic_path_response_frame.h"
#include "quiche/quic/core/frames/quic_ping_frame.h"
#include "quiche/quic/core/frames/quic_reset_stream_at_frame.h"
#include "quiche/quic/core/frames/quic_retire_connection_id_frame.h"
#include "quiche/quic/core/frames/quic_rst_stream_frame.h"
#include "quiche/quic/core/frames/quic_stop_sending_frame.h"
#include "quiche/quic/core/frames/quic_stop_waiting_frame.h"
#include "quiche/quic/core/frames/quic_stream_frame.h"
#include "quiche/quic/core/frames/quic_streams_blocked_frame.h"
#include "quiche/quic/core/frames/quic_window_update_frame.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/common/platform/api/quiche_export.h"
#include "quiche/common/quiche_buffer_allocator.h"
#ifndef QUIC_FRAME_DEBUG
#if !defined(NDEBUG) || defined(ADDRESS_SANITIZER)
#define QUIC_FRAME_DEBUG …
#else
#define QUIC_FRAME_DEBUG …
#endif
#endif
namespace quic {
struct QUICHE_EXPORT QuicFrame { … };
static_assert …;
static_assert …;
static_assert …;
QuicFrames;
QUICHE_EXPORT void DeleteFrames(QuicFrames* frames);
QUICHE_EXPORT void DeleteFrame(QuicFrame* frame);
QUICHE_EXPORT void RemoveFramesForStream(QuicFrames* frames,
QuicStreamId stream_id);
QUICHE_EXPORT bool IsControlFrame(QuicFrameType type);
QUICHE_EXPORT QuicControlFrameId GetControlFrameId(const QuicFrame& frame);
QUICHE_EXPORT void SetControlFrameId(QuicControlFrameId control_frame_id,
QuicFrame* frame);
QUICHE_EXPORT QuicFrame CopyRetransmittableControlFrame(const QuicFrame& frame);
QUICHE_EXPORT QuicFrame CopyQuicFrame(quiche::QuicheBufferAllocator* allocator,
const QuicFrame& frame);
QUICHE_EXPORT QuicFrames CopyQuicFrames(
quiche::QuicheBufferAllocator* allocator, const QuicFrames& frames);
QUICHE_EXPORT std::string QuicFrameToString(const QuicFrame& frame);
QUICHE_EXPORT std::string QuicFramesToString(const QuicFrames& frames);
}
#endif