use binrw::binrw;
pub mod arch;
pub mod connect;
pub mod cryptography;
pub mod trans;
pub mod userauth;
#[cfg(doc)]
use trans::{KexEcdhInit, KexEcdhReply};
macro_rules! message {
    ($( $name:ident($path:path) ),+ $(,)?) => {
        #[non_exhaustive]
        #[binrw]
        #[derive(Debug, Clone)]
        #[brw(big)]
        pub enum Message {
            $(
                #[doc = concat!("See [`", stringify!($path), "`] for more details.")]
                $name($path)
            ),+
        }
    };
}
message! {
    Disconnect(trans::Disconnect),
    Ignore(trans::Ignore),
    Unimplemented(trans::Unimplemented),
    Debug(trans::Debug),
    ServiceRequest(trans::ServiceRequest),
    ServiceAccept(trans::ServiceAccept),
    KexInit(trans::KexInit),
    NewKeys(trans::NewKeys),
    AuthRequest(userauth::Request),
    AuthFailure(userauth::Failure),
    AuthSuccess(userauth::Success),
    AuthBanner(userauth::Banner),
    GlobalRequest(connect::GlobalRequest),
    RequestSuccess(connect::RequestSuccess),
    ChannelOpen(connect::ChannelOpen),
    ChannelOpenConfirmation(connect::ChannelOpenConfirmation),
    ChannelOpenFailure(connect::ChannelOpenFailure),
    ChannelWindowAdjust(connect::ChannelWindowAdjust),
    ChannelData(connect::ChannelData),
    ChannelExtendedData(connect::ChannelExtendedData),
    ChannelEof(connect::ChannelEof),
    ChannelClose(connect::ChannelClose),
    ChannelRequest(connect::ChannelRequest),
    ChannelSuccess(connect::ChannelSuccess),
    ChannelFailure(connect::ChannelFailure),
}