/*
 * Copyright (c) 2020, Andreas Kling <andreas@ladybird.org>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <AK/Error.h>
#include <AK/Platform.h>

namespace IPC {

class Attachment;
class AutoCloseFileDescriptor;
class Decoder;
class Encoder;
class Message;
class MessageBuffer;
class File;
class Stub;
class TransportHandle;

#if defined(AK_OS_MACOS)
class MachBootstrapListener;
class TransportMachPort;
using Transport = TransportMachPort;
#elif !defined(AK_OS_WINDOWS)
class TransportSocket;
using Transport = TransportSocket;
#else
class TransportSocketWindows;
using Transport = TransportSocketWindows;
#endif

template<typename T>
ErrorOr<void> encode(Encoder&, T const&);

template<typename T>
ErrorOr<T> decode(Decoder&);

using MessageDataType = Vector<u8, 1024>;

}
