tiles_proxy/
tile_request.rs

1//! Structs to store HTTP requests of a tile.
2
3use std::path::Path;
4use std::path::PathBuf;
5use std::str::FromStr;
6
7pub trait TileRequest: Send + Sync {
8    fn dirpath(&self, base_dir: &str) -> PathBuf;
9    fn filepath(&self, base_dir: &str) -> PathBuf;
10    fn get_alias(&self) -> &str;
11}
12
13#[derive(Debug, PartialEq, FromForm)]
14pub struct WmtsRequest {
15    #[field(default = "")]
16    pub alias: String,
17    #[field(default = None)]
18    pub layer: String,
19    #[field(default = None)]
20    pub style: String,
21    #[field(default = None)]
22    pub tilematrixset: String,
23    #[field(name = "Service", default = None)]
24    pub service: String,
25    #[field(name = "Request", default = None)]
26    pub request: String,
27    #[field(name = "Version", default = None)]
28    pub version: String,
29    #[field(name = "Format", default = None)]
30    pub format: String,
31    #[field(name = "TileMatrix", default = None)]
32    pub tile_matrix: String,
33    #[field(name = "TileCol", default = None)]
34    pub tile_col: String,
35    #[field(name = "TileRow", default = None)]
36    pub tile_row: String,
37}
38
39impl WmtsRequest {
40    pub fn with_alias(&self, alias: &str) -> Self {
41        WmtsRequest {
42            alias: String::from_str(alias).expect(""),
43            layer: String::from(self.layer.as_str()),
44            style: String::from(self.style.as_str()),
45            tilematrixset: String::from(self.tilematrixset.as_str()),
46            service: String::from(self.service.as_str()),
47            request: String::from(self.request.as_str()),
48            version: String::from(self.version.as_str()),
49            format: String::from(self.format.as_str()),
50            tile_matrix: String::from(self.tile_matrix.as_str()),
51            tile_col: String::from(self.tile_col.as_str()),
52            tile_row: String::from(self.tile_row.as_str()),
53        }
54    }
55}
56
57impl TileRequest for WmtsRequest {
58    fn dirpath(&self, base_dir: &str) -> PathBuf {
59        Path::new(base_dir)
60            .join(self.get_alias())
61            .join(self.layer.as_str())
62            .join(self.style.as_str())
63            .join(self.tilematrixset.as_str())
64            .join(self.service.as_str())
65            .join(self.request.as_str())
66            .join(self.version.as_str())
67            .join(self.format.as_str())
68            .join(self.tile_matrix.as_str())
69            .join(self.tile_col.as_str())
70    }
71    fn filepath(&self, base_dir: &str) -> PathBuf {
72        self.dirpath(base_dir).join(self.tile_row.as_str())
73    }
74    fn get_alias(&self) -> &str {
75        self.alias.as_str()
76    }
77}
78
79pub struct XyzRequest {
80    pub alias: String,
81    pub a: String,
82    pub x: String,
83    pub y: String,
84    pub z: String,
85}
86
87impl XyzRequest {
88    pub fn new(alias: &str, a: &str, x: &str, y: &str, z: &str) -> Self {
89        XyzRequest {
90            alias: String::from_str(alias).expect(""),
91            a: String::from_str(a).expect(""),
92            x: String::from_str(x).expect(""),
93            y: String::from_str(y).expect(""),
94            z: String::from_str(z).expect(""),
95        }
96    }
97}
98impl TileRequest for XyzRequest {
99    fn dirpath(&self, base_dir: &str) -> PathBuf {
100        Path::new(base_dir)
101            .join(self.get_alias())
102            .join(self.a.as_str())
103            .join(self.x.as_str())
104            .join(self.y.as_str())
105    }
106    fn filepath(&self, base_dir: &str) -> PathBuf {
107        self.dirpath(base_dir).join(self.z.as_str())
108    }
109    fn get_alias(&self) -> &str {
110        self.alias.as_str()
111    }
112}