use super::{ServerError, failure};
use crate::link::LinkLifeCounters;
pub(super) fn lifecycle(
current: LinkLifeCounters,
previous: LinkLifeCounters,
) -> Result<LinkLifeCounters, ServerError> {
let add = |current: u64, previous: u64| {
current
.checked_add(previous)
.ok_or_else(|| failure("configured link lifecycle counter overflow"))
};
Ok(LinkLifeCounters {
links_opened: add(current.links_opened, previous.links_opened)?,
links_closed_by_peer_gone: add(
current.links_closed_by_peer_gone,
previous.links_closed_by_peer_gone,
)?,
links_closed_by_revoked: add(
current.links_closed_by_revoked,
previous.links_closed_by_revoked,
)?,
links_closed_by_refused: add(
current.links_closed_by_refused,
previous.links_closed_by_refused,
)?,
links_closed_by_replaced: add(
current.links_closed_by_replaced,
previous.links_closed_by_replaced,
)?,
links_closed_by_shutdown: add(
current.links_closed_by_shutdown,
previous.links_closed_by_shutdown,
)?,
})
}