use crate::error::*;
use crate::*;
pub mod attributes;
pub mod keepalive;
pub mod notification;
pub mod open;
pub use open::*;
pub mod update;
pub use update::*;
pub trait BgpMessage {
fn decode_from(&mut self, peer: &BgpSessionParams, buf: &[u8]) -> Result<(), BgpError>;
fn encode_to(&self, peer: &BgpSessionParams, buf: &mut [u8]) -> Result<usize, BgpError>;
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BgpMessageType {
Open,
Update,
Notification,
Keepalive,
}
impl BgpMessageType {
pub fn decode_from(code: u8) -> Result<BgpMessageType, BgpError> {
match code {
1 => Ok(BgpMessageType::Open),
2 => Ok(BgpMessageType::Update),
3 => Ok(BgpMessageType::Notification),
4 => Ok(BgpMessageType::Keepalive),
_ => Err(BgpError::static_str("Invalid message type")),
}
}
pub fn encode(&self) -> u8 {
match self {
BgpMessageType::Open => 1,
BgpMessageType::Update => 2,
BgpMessageType::Notification => 3,
BgpMessageType::Keepalive => 4,
}
}
}