use alloc::vec::Vec;
use alloy_primitives::Bytes;
pub const MAX_BYTES_PER_INCLUSION_LIST: u64 = 8192;
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
pub struct BogotaPayloadFields {
pub inclusion_list_transactions: Vec<Bytes>,
}
impl BogotaPayloadFields {
pub const fn new(inclusion_list_transactions: Vec<Bytes>) -> Self {
Self { inclusion_list_transactions }
}
}
impl From<Vec<Bytes>> for BogotaPayloadFields {
fn from(inclusion_list_transactions: Vec<Bytes>) -> Self {
Self::new(inclusion_list_transactions)
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
pub struct MaybeBogotaPayloadFields {
fields: Option<BogotaPayloadFields>,
}
impl MaybeBogotaPayloadFields {
pub const fn none() -> Self {
Self { fields: None }
}
pub const fn is_none(&self) -> bool {
self.fields.is_none()
}
pub fn into_inner(self) -> Option<BogotaPayloadFields> {
self.fields
}
pub fn inclusion_list_transactions(&self) -> Option<&Vec<Bytes>> {
self.fields.as_ref().map(|fields| &fields.inclusion_list_transactions)
}
pub const fn as_ref(&self) -> Option<&BogotaPayloadFields> {
self.fields.as_ref()
}
}
impl From<BogotaPayloadFields> for MaybeBogotaPayloadFields {
fn from(fields: BogotaPayloadFields) -> Self {
Self { fields: Some(fields) }
}
}
impl From<Option<BogotaPayloadFields>> for MaybeBogotaPayloadFields {
fn from(fields: Option<BogotaPayloadFields>) -> Self {
Self { fields }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn bogota_payload_fields_conversions() {
let transactions = vec![Bytes::from_static(&[0x01, 0x02])];
let fields: BogotaPayloadFields = transactions.clone().into();
assert_eq!(fields.inclusion_list_transactions, transactions);
let maybe_fields: MaybeBogotaPayloadFields = fields.into();
assert_eq!(maybe_fields.inclusion_list_transactions(), Some(&transactions));
}
}