pipedash_core/domain/
refresh.rs1use serde::{
2 Deserialize,
3 Serialize,
4};
5
6use super::error::FailureKind;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(rename_all = "snake_case")]
10pub enum RefreshState {
11 Ok,
12 Failed,
13 Pending,
14 Recent,
15 NotFound,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
19pub struct RefreshResult {
20 pub provider_id: i64,
21 pub state: RefreshState,
22 pub kind: Option<FailureKind>,
23 pub message: Option<String>,
24}
25
26impl RefreshResult {
27 pub fn new(provider_id: i64, state: RefreshState) -> Self {
28 Self {
29 provider_id,
30 state,
31 kind: None,
32 message: None,
33 }
34 }
35
36 pub fn failed(provider_id: i64, kind: FailureKind, message: String) -> Self {
37 Self {
38 provider_id,
39 state: RefreshState::Failed,
40 kind: Some(kind),
41 message: Some(message),
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn serializes_to_the_wire_contract() {
52 let result = RefreshResult::failed(7, FailureKind::RateLimited, "slow down".to_string());
53
54 assert_eq!(
55 serde_json::to_value(&result).unwrap(),
56 serde_json::json!({
57 "provider_id": 7,
58 "state": "failed",
59 "kind": "rate_limited",
60 "message": "slow down"
61 })
62 );
63 assert_eq!(
64 serde_json::to_value(RefreshResult::new(1, RefreshState::NotFound)).unwrap(),
65 serde_json::json!({
66 "provider_id": 1,
67 "state": "not_found",
68 "kind": null,
69 "message": null
70 })
71 );
72 }
73}