use radicle_core::{NodeId, RepoId}; use crate::fetcher::RefsToFetch; use super::FetchConfig; /// Commands for transitioning the [`FetcherState`]. /// /// [`FetcherState`]: super::FetcherState #[derive(Clone, Debug, PartialEq, Eq)] pub enum Command { Fetch(Fetch), Fetched(Fetched), Cancel(Cancel), } impl From for Command { fn from(v: Fetch) -> Self { Self::Fetch(v) } } impl From for Command { fn from(v: Fetched) -> Self { Self::Fetched(v) } } impl From for Command { fn from(v: Cancel) -> Self { Self::Cancel(v) } } impl Command { pub fn fetch(from: NodeId, rid: RepoId, refs: RefsToFetch, config: FetchConfig) -> Self { Self::from(Fetch { from, rid, refs, config, }) } pub fn fetched(from: NodeId, rid: RepoId) -> Self { Self::from(Fetched { from, rid }) } pub fn cancel(from: NodeId) -> Self { Self::from(Cancel { from }) } } /// A fetch wants to be marked as active. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Fetch { /// The node from which the repository is being fetched from. pub from: NodeId, /// The repository to fetch. pub rid: RepoId, /// The references to fetch. pub refs: RefsToFetch, /// The configuration options for the fetch process. pub config: FetchConfig, } /// A fetch wants to be marked as completed. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct Fetched { /// The node from which the repository was fetched from. pub from: NodeId, /// The repository that was fetched. pub rid: RepoId, } /// Any fetches are canceled for the given node. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub struct Cancel { /// The node for which the fetches should be canceled. pub from: NodeId, }