1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use crate::image::{ImageName, Registry, Repository};
#[derive(Clone, Debug)]
pub struct DefaultRegistry {
pub network_name: Registry,
pub also_known_as: Vec<Registry>,
pub library_prefix: Option<Repository>,
}
impl From<Registry> for DefaultRegistry {
fn from(network_name: Registry) -> Self {
DefaultRegistry {
network_name,
also_known_as: vec![],
library_prefix: None,
}
}
}
impl DefaultRegistry {
pub fn new() -> Self {
DefaultRegistry {
network_name: "registry-1.docker.io".parse().unwrap(),
also_known_as: vec!["docker.io".parse().unwrap()],
library_prefix: Some("library".parse().unwrap()),
}
}
pub fn is_default(&self, registry: &Option<Registry>) -> bool {
match registry {
None => true,
Some(registry) => {
registry == &self.network_name || self.also_known_as.contains(registry)
}
}
}
pub fn resolve_image_name(&self, image: &ImageName) -> (Registry, Repository) {
let registry = image.registry();
let settings = if self.is_default(®istry) {
self.clone()
} else {
registry.unwrap().clone().into()
};
let image_repo = image.repository();
let complete_repo = if image_repo.iter().nth(1).is_some() {
image_repo
} else {
match &settings.library_prefix {
None => image_repo,
Some(prefix) => prefix.join(&image_repo),
}
};
(settings.network_name, complete_repo)
}
}