use std::collections::{BTreeMap, VecDeque};
use radicle_core::{NodeId, RepoId};
use crate::fetcher::RefsToFetch;
use super::{ActiveFetch, FetchConfig, QueuedFetch};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Event {
Fetch(Fetch),
Fetched(Fetched),
Cancel(Cancel),
}
impl From<Cancel> for Event {
fn from(v: Cancel) -> Self {
Self::Cancel(v)
}
}
impl From<Fetched> for Event {
fn from(v: Fetched) -> Self {
Self::Fetched(v)
}
}
impl From<Fetch> for Event {
fn from(v: Fetch) -> Self {
Self::Fetch(v)
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Fetch {
Started {
rid: RepoId,
from: NodeId,
refs: RefsToFetch,
config: FetchConfig,
},
AlreadyFetching {
rid: RepoId,
from: NodeId,
},
QueueAtCapacity {
rid: RepoId,
from: NodeId,
refs: RefsToFetch,
config: FetchConfig,
capacity: usize,
},
Queued {
rid: RepoId,
from: NodeId,
},
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Fetched {
NotFound { from: NodeId, rid: RepoId },
Completed {
from: NodeId,
rid: RepoId,
refs: RefsToFetch,
},
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Cancel {
Unexpected { from: NodeId },
Canceled {
from: NodeId,
active: BTreeMap<RepoId, ActiveFetch>,
queued: VecDeque<QueuedFetch>,
},
}