use base64::Engine as _;
use base64::engine::general_purpose::URL_SAFE_NO_PAD;
use martin_tile_utils::{TileData, TileInfo};
#[derive(Debug, Clone)]
pub struct Tile {
pub data: TileData,
pub info: TileInfo,
pub etag: String,
}
impl Tile {
#[must_use]
pub fn new_hash_etag(data: TileData, info: TileInfo) -> Self {
let etag = if data.is_empty() {
0
} else {
xxhash_rust::xxh3::xxh3_128(&data)
};
let etag_base64 = URL_SAFE_NO_PAD.encode(etag.to_ne_bytes());
Self {
data,
info,
etag: etag_base64,
}
}
#[must_use]
pub fn new_with_etag(data: TileData, info: TileInfo, etag: String) -> Self {
Self { data, info, etag }
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
}