use anyhow::Result;
use async_trait::async_trait;
use versatiles_core::io::DataWriterTrait;
use versatiles_derive::context;
use crate::{TileSource, TileSourceTraverseExt, TilesRuntime, TilesWriter, Traversal};
pub struct MockWriter {}
impl MockWriter {
#[context("mock writing tiles from reader '{}'", reader.source_type())]
pub async fn write(reader: &mut dyn TileSource) -> Result<()> {
let _temp = reader.tilejson();
reader
.traverse_all_tiles(
&Traversal::ANY,
|_bbox, mut stream| {
Box::pin(async move {
while stream.next().await.is_some() {}
Ok(())
})
},
TilesRuntime::default(),
)
.await
}
}
#[async_trait]
impl TilesWriter for MockWriter {
fn supported_options() -> &'static [&'static str] {
&["mock_option", "mock_flag"]
}
#[context("mock writing tiles to DataWriter")]
async fn write_to_writer(
reader: &mut dyn TileSource,
_writer: &mut dyn DataWriterTrait,
_runtime: TilesRuntime,
) -> Result<()> {
MockWriter::write(reader).await
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{MockReader, MockReaderProfile};
#[tokio::test]
async fn convert_png() -> Result<()> {
let mut reader = MockReader::new_mock_profile(MockReaderProfile::Png)?;
MockWriter::write(&mut reader).await?;
Ok(())
}
#[tokio::test]
async fn convert_pbf() -> Result<()> {
let mut reader = MockReader::new_mock_profile(MockReaderProfile::Pbf)?;
MockWriter::write(&mut reader).await?;
Ok(())
}
}