Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024 rust edition #1698

Merged
merged 7 commits into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[workspace]
resolver = "2"
resolver = "3"
members = ["martin", "martin-tile-utils", "mbtiles"]

[workspace.package]
edition = "2021"
edition = "2024"
license = "MIT OR Apache-2.0"
repository = "https://github.com/maplibre/martin"
rust-version = "1.80"
rust-version = "1.85"
readme = "README.md"
homepage = "https://martin.maplibre.org/"

Expand Down
10 changes: 3 additions & 7 deletions martin-tile-utils/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,7 @@ pub fn get_zoom_precision(zoom: u8) -> usize {
assert!(zoom < MAX_ZOOM, "zoom {zoom} must be <= {MAX_ZOOM}");
let lng_delta = webmercator_to_wgs84(EARTH_CIRCUMFERENCE / f64::from(1_u32 << zoom), 0.0).0;
let log = lng_delta.log10() - 0.5;
if log > 0.0 {
0
} else {
-log.ceil() as usize
}
if log > 0.0 { 0 } else { -log.ceil() as usize }
}

#[must_use]
Expand Down Expand Up @@ -304,10 +300,10 @@ mod tests {

use std::fs::read;

use approx::assert_relative_eq;
use insta::assert_snapshot;
use Encoding::{Internal, Uncompressed};
use Format::{Jpeg, Json, Png, Webp};
use approx::assert_relative_eq;
use insta::assert_snapshot;

use super::*;

Expand Down
4 changes: 2 additions & 2 deletions martin/benches/bench.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use async_trait::async_trait;
use criterion::async_executor::FuturesExecutor;
use criterion::{criterion_group, criterion_main, Criterion};
use criterion::{Criterion, criterion_group, criterion_main};
use martin::srv::DynTileSource;
use martin::{CatalogSourceEntry, MartinResult, Source, TileData, TileSources, UrlQuery};
use martin_tile_utils::{Encoding, Format, TileCoord, TileInfo};
use pprof::criterion::{Output, PProfProfiler};
use tilejson::{tilejson, TileJSON};
use tilejson::{TileJSON, tilejson};

#[derive(Clone, Debug)]
struct NullSource {
Expand Down
18 changes: 9 additions & 9 deletions martin/src/args/environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@ pub trait Env<'a>: VariableMap<'a> {
#[must_use]
fn get_env_str(&self, key: &str) -> Option<String> {
match self.var_os(key) {
Some(s) => {
match s.into_string() {
Ok(v) => Some(v),
Err(v) => {
let v = v.to_string_lossy();
warn!("Environment variable {key} has invalid unicode. Lossy representation: {v}");
None
}
Some(s) => match s.into_string() {
Ok(v) => Some(v),
Err(v) => {
let v = v.to_string_lossy();
warn!(
"Environment variable {key} has invalid unicode. Lossy representation: {v}"
);
None
}
}
},
None => None,
}
}
Expand Down
2 changes: 1 addition & 1 deletion martin/src/args/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pub use environment::{Env, OsEnv};
#[cfg(feature = "postgres")]
mod pg;
#[cfg(feature = "postgres")]
pub use pg::{BoundsCalcType, PgArgs, DEFAULT_BOUNDS_TIMEOUT};
pub use pg::{BoundsCalcType, DEFAULT_BOUNDS_TIMEOUT, PgArgs};

mod root;
pub use root::{Args, ExtraArgs, MetaArgs};
Expand Down
30 changes: 21 additions & 9 deletions martin/src/args/pg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
use crate::args::connections::Arguments;
use crate::args::connections::State::{Ignore, Take};
use crate::args::environment::Env;
use crate::pg::{PgConfig, PgSslCerts, POOL_SIZE_DEFAULT};
use crate::pg::{POOL_SIZE_DEFAULT, PgConfig, PgSslCerts};
use crate::utils::{OptBoolObj, OptOneMany};

// Must match the help string for BoundsType::Quick
Expand Down Expand Up @@ -92,32 +92,42 @@ impl PgArgs {
} = self;

if let Some(value) = default_srid {
info!("Overriding configured default SRID to {value} on all Postgres connections because of a CLI parameter");
info!(
"Overriding configured default SRID to {value} on all Postgres connections because of a CLI parameter"
);
pg_config.iter_mut().for_each(|c| {
c.default_srid = default_srid;
});
}
if let Some(value) = pool_size {
info!("Overriding configured pool size to {value} on all Postgres connections because of a CLI parameter");
info!(
"Overriding configured pool size to {value} on all Postgres connections because of a CLI parameter"
);
pg_config.iter_mut().for_each(|c| {
c.pool_size = pool_size;
});
}
if let Some(value) = auto_bounds {
info!("Overriding auto_bounds to {value} on all Postgres connections because of a CLI parameter");
info!(
"Overriding auto_bounds to {value} on all Postgres connections because of a CLI parameter"
);
pg_config.iter_mut().for_each(|c| {
c.auto_bounds = auto_bounds;
});
}
if let Some(value) = max_feature_count {
info!("Overriding maximum feature count to {value} on all Postgres connections because of a CLI parameter");
info!(
"Overriding maximum feature count to {value} on all Postgres connections because of a CLI parameter"
);
pg_config.iter_mut().for_each(|c| {
c.max_feature_count = max_feature_count;
});
}
if let Some(ref value) = ca_root_file {
info!("Overriding root certificate file to {} on all Postgres connections because of a CLI parameter",
value.display());
info!(
"Overriding root certificate file to {} on all Postgres connections because of a CLI parameter",
value.display()
);
pg_config.iter_mut().for_each(|c| {
c.ssl_certificates.ssl_root_cert.clone_from(&ca_root_file);
});
Expand All @@ -133,7 +143,9 @@ impl PgArgs {
] {
// We don't want to warn about these in case they were used in the config file expansion
if env.has_unused_var(v) {
warn!("Environment variable {v} is set, but will be ignored because a configuration file was loaded. Any environment variables can be used inside the config yaml file.");
warn!(
"Environment variable {v} is set, but will be ignored because a configuration file was loaded. Any environment variables can be used inside the config yaml file."
);
}
}
}
Expand Down Expand Up @@ -213,8 +225,8 @@ mod tests {
use std::path::PathBuf;

use super::*;
use crate::test_utils::{os, some, FauxEnv};
use crate::MartinError;
use crate::test_utils::{FauxEnv, os, some};

#[test]
fn test_extract_conn_strings() {
Expand Down
4 changes: 2 additions & 2 deletions martin/src/args/root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::path::PathBuf;
use clap::Parser;
use log::warn;

use crate::MartinError::ConfigAndConnectionsError;
use crate::args::connections::Arguments;
use crate::args::environment::Env;
use crate::args::srv::SrvArgs;
Expand All @@ -14,7 +15,6 @@ use crate::config::Config;
feature = "cog"
))]
use crate::file_config::FileConfigEnum;
use crate::MartinError::ConfigAndConnectionsError;
use crate::MartinResult;
#[cfg(feature = "fonts")]
use crate::OptOneMany;
Expand Down Expand Up @@ -184,9 +184,9 @@ mod tests {
use insta::assert_yaml_snapshot;

use super::*;
use crate::MartinError::UnrecognizableConnections;
use crate::args::PreferredEncoding;
use crate::test_utils::FauxEnv;
use crate::MartinError::UnrecognizableConnections;

fn parse(args: &[&str]) -> MartinResult<(Config, MetaArgs)> {
let args = Args::parse_from(args);
Expand Down
2 changes: 1 addition & 1 deletion martin/src/args/srv.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use clap::ValueEnum;
use serde::{Deserialize, Serialize};

use crate::srv::{SrvConfig, KEEP_ALIVE_DEFAULT, LISTEN_ADDRESSES_DEFAULT};
use crate::srv::{KEEP_ALIVE_DEFAULT, LISTEN_ADDRESSES_DEFAULT, SrvConfig};

#[allow(clippy::doc_markdown)]
#[derive(clap::Args, Debug, PartialEq, Default)]
Expand Down
18 changes: 9 additions & 9 deletions martin/src/bin/martin-cp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,23 @@ use std::time::Duration;

use actix_http::error::ParseError;
use actix_http::test::TestRequest;
use actix_web::http::header::{AcceptEncoding, Header as _, ACCEPT_ENCODING};
use actix_web::http::header::{ACCEPT_ENCODING, AcceptEncoding, Header as _};
use clap::Parser;
use futures::stream::{self, StreamExt};
use futures::TryStreamExt;
use futures::stream::{self, StreamExt};
use log::{debug, error, info, log_enabled};
use martin::args::{Args, ExtraArgs, MetaArgs, OsEnv, SrvArgs};
use martin::srv::{merge_tilejson, DynTileSource};
use martin::srv::{DynTileSource, merge_tilejson};
use martin::{
append_rect, read_config, Config, MartinError, MartinResult, ServerState, TileData,
TileInfoSource, TileRect,
Config, MartinError, MartinResult, ServerState, TileData, TileInfoSource, TileRect,
append_rect, read_config,
};
use martin_tile_utils::{bbox_to_xyz, TileCoord, TileInfo};
use mbtiles::sqlx::SqliteConnection;
use martin_tile_utils::{TileCoord, TileInfo, bbox_to_xyz};
use mbtiles::UpdateZoomType::GrowOnly;
use mbtiles::sqlx::SqliteConnection;
use mbtiles::{
init_mbtiles_schema, is_empty_database, CopyDuplicateMode, MbtError, MbtType, MbtTypeCli,
Mbtiles,
CopyDuplicateMode, MbtError, MbtType, MbtTypeCli, Mbtiles, init_mbtiles_schema,
is_empty_database,
};
use tilejson::Bounds;
use tokio::sync::mpsc::channel;
Expand Down
2 changes: 1 addition & 1 deletion martin/src/bin/martin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use clap::Parser;
use log::{error, info, log_enabled};
use martin::args::{Args, OsEnv};
use martin::srv::new_server;
use martin::{read_config, Config, MartinResult};
use martin::{Config, MartinResult, read_config};

const VERSION: &str = env!("CARGO_PKG_VERSION");

Expand Down
2 changes: 1 addition & 1 deletion martin/src/cog/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use url::Url;

use crate::config::UnrecognizedValues;
use crate::file_config::{ConfigExtras, SourceConfigExtras};
use crate::{file_config::FileResult, Source};
use crate::{Source, file_config::FileResult};

use super::source::CogSource;

Expand Down
4 changes: 3 additions & 1 deletion martin/src/cog/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ pub enum CogError {
#[error("Couldn't decode {1} as tiff file: {0}")]
InvalidTiffFile(TiffError, PathBuf),

#[error("Requested zoom level {0} from file {1} is out of range. Possible zoom levels are {2} to {3}")]
#[error(
"Requested zoom level {0} from file {1} is out of range. Possible zoom levels are {2} to {3}"
)]
ZoomOutOfRange(u8, PathBuf, u8, u8),

#[error("Couldn't find any image in the tiff file: {0}")]
Expand Down
4 changes: 2 additions & 2 deletions martin/src/cog/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ use tiff::tags::Tag::{self, GdalNodata};

use async_trait::async_trait;
use martin_tile_utils::{Format, TileCoord, TileInfo};
use tilejson::{tilejson, TileJSON};
use tilejson::{TileJSON, tilejson};

use crate::file_config::FileError;
use crate::{file_config::FileResult, MartinResult, Source, TileData, UrlQuery};
use crate::{MartinResult, Source, TileData, UrlQuery, file_config::FileResult};

use super::CogError;

Expand Down
13 changes: 4 additions & 9 deletions martin/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use std::collections::HashMap;
use std::ffi::OsStr;
use std::fs::File;
use std::future::Future;
use std::io::prelude::*;
use std::path::{Path, PathBuf};
use std::pin::Pin;
Expand All @@ -11,6 +10,7 @@ use log::info;
use serde::{Deserialize, Serialize};
use subst::VariableMap;

use crate::MartinError::{ConfigLoadError, ConfigParseError, ConfigWriteError, NoSources};
#[cfg(any(
feature = "mbtiles",
feature = "pmtiles",
Expand All @@ -23,9 +23,8 @@ use crate::fonts::FontSources;
use crate::source::{TileInfoSources, TileSources};
#[cfg(feature = "sprites")]
use crate::sprites::{SpriteConfig, SpriteSources};
use crate::srv::{SrvConfig, RESERVED_KEYWORDS};
use crate::utils::{init_aws_lc_tls, parse_base_path, CacheValue, MainCache, OptMainCache};
use crate::MartinError::{ConfigLoadError, ConfigParseError, ConfigWriteError, NoSources};
use crate::srv::{RESERVED_KEYWORDS, SrvConfig};
use crate::utils::{CacheValue, MainCache, OptMainCache, init_aws_lc_tls, parse_base_path};
#[cfg(any(feature = "fonts", feature = "postgres"))]
use crate::OptOneMany;
use crate::{IdResolver, MartinResult};
Expand Down Expand Up @@ -127,11 +126,7 @@ impl Config {
#[cfg(feature = "fonts")]
let is_empty = is_empty && self.fonts.is_empty();

if is_empty {
Err(NoSources)
} else {
Ok(res)
}
if is_empty { Err(NoSources) } else { Ok(res) }
}

pub async fn resolve(&mut self) -> MartinResult<ServerState> {
Expand Down
10 changes: 5 additions & 5 deletions martin/src/file_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ use log::{info, warn};
use serde::{Deserialize, Serialize};
use url::Url;

use crate::config::{copy_unrecognized_config, UnrecognizedValues};
use crate::MartinResult;
use crate::OptOneMany::{Many, One};
use crate::config::{UnrecognizedValues, copy_unrecognized_config};
use crate::file_config::FileError::{
InvalidFilePath, InvalidSourceFilePath, InvalidSourceUrl, IoError,
};
use crate::source::{TileInfoSource, TileInfoSources};
use crate::utils::{IdResolver, OptMainCache, OptOneMany};
use crate::MartinResult;
use crate::OptOneMany::{Many, One};

pub type FileResult<T> = Result<T, FileError>;

Expand Down Expand Up @@ -74,13 +74,13 @@ pub trait SourceConfigExtras: ConfigExtras {
&self,
id: String,
path: PathBuf,
) -> impl std::future::Future<Output = FileResult<TileInfoSource>> + Send;
) -> impl Future<Output = FileResult<TileInfoSource>> + Send;

fn new_sources_url(
&self,
id: String,
url: Url,
) -> impl std::future::Future<Output = FileResult<TileInfoSource>> + Send;
) -> impl Future<Output = FileResult<TileInfoSource>> + Send;
}

#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
Expand Down
6 changes: 4 additions & 2 deletions martin/src/fonts/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use itertools::Itertools as _;
use log::{debug, info, warn};
use pbf_font_tools::freetype::{Face, Library};
use pbf_font_tools::protobuf::Message;
use pbf_font_tools::{render_sdf_glyph, Fontstack, Glyphs, PbfFontError};
use pbf_font_tools::{Fontstack, Glyphs, PbfFontError, render_sdf_glyph};
use regex::Regex;
use serde::{Deserialize, Serialize};

Expand Down Expand Up @@ -45,7 +45,9 @@ pub enum FontError {
)]
InvalidFontRangeEnd(u32),

#[error("Given font range {0}-{1} is invalid. It must be {CP_RANGE_SIZE} characters long (e.g. 0-255, 256-511, ...)")]
#[error(
"Given font range {0}-{1} is invalid. It must be {CP_RANGE_SIZE} characters long (e.g. 0-255, 256-511, ...)"
)]
InvalidFontRange(u32, u32),

#[error(transparent)]
Expand Down
6 changes: 3 additions & 3 deletions martin/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#![forbid(unsafe_code)]

mod config;
pub use config::{read_config, Config, ServerState};
pub use config::{Config, ServerState, read_config};

mod source;
pub use source::{
Expand All @@ -11,8 +11,8 @@ pub use source::{

mod utils;
pub use utils::{
append_rect, IdResolver, MartinError, MartinResult, OptBoolObj, OptOneMany, TileRect,
NO_MAIN_CACHE,
IdResolver, MartinError, MartinResult, NO_MAIN_CACHE, OptBoolObj, OptOneMany, TileRect,
append_rect,
};

pub mod args;
Expand Down
Loading
Loading