Skip to main content

cgx_core/messages/
crate_resolution.rs

1use std::{path::PathBuf, time::Duration};
2
3use serde::{Deserialize, Serialize};
4
5use super::Message;
6use crate::{crate_resolver::ResolvedCrate, cratespec::CrateSpec};
7
8/// Messages related to crate resolution and resolution cache operations.
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(tag = "event", rename_all = "snake_case")]
11pub enum CrateResolutionMessage {
12    CacheLookup {
13        spec: CrateSpec,
14    },
15    CacheHit {
16        path: PathBuf,
17        age_secs: u64,
18        ttl_remaining_secs: u64,
19    },
20    CacheMiss {
21        spec: CrateSpec,
22    },
23    CacheStale {
24        spec: CrateSpec,
25        age_secs: u64,
26    },
27    Resolving {
28        spec: CrateSpec,
29    },
30    Resolved {
31        resolved: ResolvedCrate,
32    },
33    CacheStored {
34        path: PathBuf,
35    },
36    UsingStaleFallback {
37        spec: CrateSpec,
38        age_secs: u64,
39    },
40}
41
42impl CrateResolutionMessage {
43    pub fn cache_lookup(spec: &CrateSpec) -> Self {
44        Self::CacheLookup { spec: spec.clone() }
45    }
46
47    pub fn cache_hit(path: &std::path::Path, age: Duration, ttl_remaining: Duration) -> Self {
48        Self::CacheHit {
49            path: path.to_path_buf(),
50            age_secs: age.as_secs(),
51            ttl_remaining_secs: ttl_remaining.as_secs(),
52        }
53    }
54
55    pub fn cache_miss(spec: &CrateSpec) -> Self {
56        Self::CacheMiss { spec: spec.clone() }
57    }
58
59    pub fn cache_stale(spec: &CrateSpec, age: Duration) -> Self {
60        Self::CacheStale {
61            spec: spec.clone(),
62            age_secs: age.as_secs(),
63        }
64    }
65
66    pub fn resolving(spec: &CrateSpec) -> Self {
67        Self::Resolving { spec: spec.clone() }
68    }
69
70    pub fn resolved(resolved: &ResolvedCrate) -> Self {
71        Self::Resolved {
72            resolved: resolved.clone(),
73        }
74    }
75
76    pub fn cache_stored(path: &std::path::Path) -> Self {
77        Self::CacheStored {
78            path: path.to_path_buf(),
79        }
80    }
81
82    pub fn using_stale_fallback(spec: &CrateSpec, age: Duration) -> Self {
83        Self::UsingStaleFallback {
84            spec: spec.clone(),
85            age_secs: age.as_secs(),
86        }
87    }
88}
89
90impl From<CrateResolutionMessage> for Message {
91    fn from(msg: CrateResolutionMessage) -> Self {
92        Message::CrateResolution(msg)
93    }
94}