use serde::{Deserialize, Serialize};
use crate::SLChainId;
#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(tag = "type", content = "chain_id")]
pub enum SettlementLayer {
L1(SLChainId),
Gateway(SLChainId),
}
impl SettlementLayer {
pub fn is_gateway(self) -> bool {
matches!(self, Self::Gateway(_))
}
pub fn chain_id(&self) -> SLChainId {
match self {
Self::L1(chain_id) | Self::Gateway(chain_id) => *chain_id,
}
}
pub fn for_tests() -> Self {
Self::L1(SLChainId(9))
}
}
#[derive(Debug, Clone)]
pub struct WorkingSettlementLayer {
unsafe_settlement_layer: SettlementLayer,
migration_in_progress: bool,
}
impl WorkingSettlementLayer {
pub fn new(unsafe_settlement_layer: SettlementLayer) -> Self {
Self {
unsafe_settlement_layer,
migration_in_progress: false,
}
}
pub fn set_migration_in_progress(&mut self, in_progress: bool) {
self.migration_in_progress = in_progress;
}
pub fn settlement_layer(&self) -> SettlementLayer {
self.unsafe_settlement_layer
}
pub fn settlement_layer_for_sending_txs(&self) -> Option<SettlementLayer> {
if self.migration_in_progress {
None
} else {
Some(self.unsafe_settlement_layer)
}
}
}