mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
Add errors for tile loading
This commit is contained in:
parent
d2b2abc827
commit
60c6ec66d1
21
libs/vector_tile/src/error.rs
Normal file
21
libs/vector_tile/src/error.rs
Normal file
@ -0,0 +1,21 @@
|
||||
use std::io;
|
||||
use protobuf::ProtobufError;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
Generic(String),
|
||||
Protobuf(ProtobufError),
|
||||
IO(io::Error),
|
||||
}
|
||||
|
||||
impl From<ProtobufError> for Error {
|
||||
fn from(err: ProtobufError) -> Self {
|
||||
Error::Protobuf(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<io::Error> for Error {
|
||||
fn from(err: io::Error) -> Self {
|
||||
Error::IO(err)
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,12 @@
|
||||
use std::fs::File;
|
||||
use std::io;
|
||||
use std::io::{BufReader, Read};
|
||||
use std::io::{BufRead, BufReader, Read};
|
||||
use std::path::{Path};
|
||||
|
||||
use protobuf::Message;
|
||||
|
||||
use crate::encoding::Decode;
|
||||
use crate::error::Error;
|
||||
use crate::protos::vector_tile::Tile as TileProto;
|
||||
use crate::tile::Tile;
|
||||
|
||||
@ -18,15 +19,19 @@ mod tests;
|
||||
pub mod geometry;
|
||||
pub mod tile;
|
||||
pub mod grid;
|
||||
pub mod error;
|
||||
|
||||
pub fn parse_tile<P: AsRef<Path>>(path: P) -> io::Result<Tile> {
|
||||
pub fn parse_tile<P: AsRef<Path>>(path: P) -> Result<Tile, Error> {
|
||||
let mut f = File::open(path)?;
|
||||
let mut reader = BufReader::new(f);
|
||||
return Ok(parse_tile_reader(&mut reader));
|
||||
parse_tile_reader(&mut reader).into()
|
||||
}
|
||||
|
||||
pub fn parse_tile_reader(reader: &mut dyn Read) -> Tile {
|
||||
let proto_tile = TileProto::parse_from_reader(reader).unwrap();
|
||||
return proto_tile.decode();
|
||||
pub fn parse_tile_reader<B: BufRead>(reader: &mut B) -> Result<Tile, Error> {
|
||||
if reader.fill_buf()?.is_empty() {
|
||||
return Err(Error::Generic("input must not be empty".to_string()));
|
||||
}
|
||||
let proto_tile = TileProto::parse_from_reader(reader)?;
|
||||
Ok(proto_tile.decode())
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
use std::fs::File;
|
||||
use std::io::BufReader;
|
||||
use std::io::{BufReader, Cursor};
|
||||
|
||||
use protobuf::Message;
|
||||
|
||||
use crate::encoding::Decode;
|
||||
use crate::grid::{GOOGLE_MERCATOR, tile_coordinates_bavaria};
|
||||
use crate::parse_tile;
|
||||
use crate::grid::{google_mercator, tile_coordinates_bavaria};
|
||||
use crate::{parse_tile, parse_tile_reader};
|
||||
use crate::protos::vector_tile::Tile;
|
||||
|
||||
#[test]
|
||||
@ -15,5 +15,10 @@ fn test_parsing_europe_pbf() {
|
||||
|
||||
#[test]
|
||||
fn test_tile_coordinates_bavaria() {
|
||||
println!("{:?}", tile_coordinates_bavaria(&GOOGLE_MERCATOR, 6));
|
||||
println!("{:?}", tile_coordinates_bavaria(&google_mercator(), 6));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_empty_fail() {
|
||||
assert!(parse_tile_reader(&mut Cursor::new(&[])).is_err())
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user