// WARNING: This file is machine generated by fidlgen.

#pragma once

#include <fidl/test/protocols/llcpp/fidl.h>

// For ::fidl::fuzzing::DecoderEncoderImpl.
#include <lib/fidl/cpp/fuzzing/decoder_encoder.h>

namespace fuzzing {

inline constexpr ::std::array<::fidl::fuzzing::DecoderEncoder, 34>
    fidl_test_protocols_decoder_encoders = {
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl_test_protocols::wire::
                WithErrorSyntax_ResponseAsStruct_Response>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl_test_protocols::wire::
                WithErrorSyntax_ErrorAsPrimitive_Response>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl_test_protocols::wire::WithErrorSyntax_ErrorAsEnum_Response>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::DiscoverableProtocol::Method>>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl::WireRequest<::fidl_test_protocols::Transitional::Request>>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl::WireResponse<::fidl_test_protocols::Transitional::Request>>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl::WireRequest<::fidl_test_protocols::Transitional::OneWay>>,
        ::fidl::fuzzing::DecoderEncoderImpl<
            ::fidl::WireResponse<::fidl_test_protocols::Transitional::Event>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::ChannelProtocol::MethodA>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::ChannelProtocol::EventA>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::ChannelProtocol::MethodB>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::ChannelProtocol::MethodB>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::ChannelProtocol::TakeHandle>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::ChannelProtocol::TakeHandle>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::ChannelProtocol::MutateSocket>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::ChannelProtocol::MutateSocket>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                NoRequestNoResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                NoRequestEmptyResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                NoRequestEmptyResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                NoRequestWithResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                NoRequestWithResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                WithRequestNoResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                WithRequestEmptyResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                WithRequestEmptyResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                WithRequestWithResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                WithRequestWithResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                OnEmptyResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithAndWithoutRequestResponse::
                OnWithResponse>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithErrorSyntax::ResponseAsStruct>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithErrorSyntax::ResponseAsStruct>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithErrorSyntax::ErrorAsPrimitive>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithErrorSyntax::ErrorAsPrimitive>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
            ::fidl_test_protocols::WithErrorSyntax::ErrorAsEnum>>,
        ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
            ::fidl_test_protocols::WithErrorSyntax::ErrorAsEnum>>,
};

}  // namespace fuzzing
