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

#pragma once

#include <fidl/fidl.test.foreigntypeinresponseusedthroughcompose/cpp/wire.h>

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

namespace fuzzing {

inline constexpr ::std::array<::fidl::fuzzing::DecoderEncoderForType, 2>
    fidl_test_foreigntypeinresponseusedthroughcompose_decoder_encoders = {

        ::fidl::fuzzing::DecoderEncoderForType{
            .fidl_type_name =
                "::fidl::WireRequest<::fidl_test_"
                "foreigntypeinresponseusedthroughcompose::Top::GetFoo>",
            .has_flexible_envelope = false,
            .decoder_encoder =
                ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireRequest<
                    ::fidl_test_foreigntypeinresponseusedthroughcompose::Top::
                        GetFoo>>,
        },
        ::fidl::fuzzing::DecoderEncoderForType{
            .fidl_type_name =
                "::fidl::WireResponse<::fidl_test_"
                "foreigntypeinresponseusedthroughcompose::Top::GetFoo>",
            .has_flexible_envelope = false,
            .decoder_encoder =
                ::fidl::fuzzing::DecoderEncoderImpl<::fidl::WireResponse<
                    ::fidl_test_foreigntypeinresponseusedthroughcompose::Top::
                        GetFoo>>,
        },
};

}  // namespace fuzzing
