pub fn set_log_thread_enabled(enable: bool) {
ffi::Log_useLogThread(enable);
}
fn log_from_cpp(severity: ffi::EventSeverity, event: ffi::Event, code: i64, message: &str) {
#[cfg(feature = "log")]
match severity {
ffi::EventSeverity::Debug => log::debug!("{event:?} (code={code}) {message}"),
ffi::EventSeverity::Info => log::info!("{event:?} (code={code}) {message}"),
ffi::EventSeverity::Warning => log::warn!("{event:?} (code={code}) {message}"),
ffi::EventSeverity::Error => log::error!("{event:?} (code={code}) {message}"),
ffi::EventSeverity { repr } => {
log::error!("{event:?} (severity={repr}, code={code}) {message}");
}
}
}
#[allow(clippy::borrow_as_ptr)]
#[cxx::bridge(namespace = "mln::bridge")]
pub mod ffi {
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum MapMode {
Continuous,
Static,
Tile,
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
enum MapDebugOptions {
NoDebug = 0,
TileBorders = 0b0000_0010, ParseStatus = 0b0000_0100, Timestamps = 0b0000_1000, Collision = 0b0001_0000, Overdraw = 0b0010_0000, StencilClip = 0b0100_0000, DepthBuffer = 0b1000_0000, }
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EventSeverity {
Debug = 0,
Info = 1,
Warning = 2,
Error = 3,
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Event {
General = 0,
Setup = 1,
Shader = 2,
ParseStyle = 3,
ParseTile = 4,
Render = 5,
Style = 6,
Database = 7,
HttpRequest = 8,
Sprite = 9,
Image = 10,
OpenGL = 11,
JNI = 12,
Android = 13,
Crash = 14,
Glyph = 15,
Timing = 16,
}
#[namespace = "mbgl"]
unsafe extern "C++" {
include!("mbgl/map/mode.hpp");
type MapMode;
type MapDebugOptions;
pub type EventSeverity;
pub type Event;
}
unsafe extern "C++" {
include!("map_renderer.h");
type MapRenderer;
#[allow(clippy::too_many_arguments)]
fn MapRenderer_new(
mapMode: MapMode,
width: u32,
height: u32,
pixelRatio: f32,
cachePath: &[u8],
assetRoot: &[u8],
apiKey: &str,
baseUrl: &str,
uriSchemeAlias: &str,
apiKeyParameterName: &str,
sourceTemplate: &str,
styleTemplate: &str,
spritesTemplate: &str,
glyphsTemplate: &str,
tileTemplate: &str,
requiresApiKey: bool,
) -> UniquePtr<MapRenderer>;
fn MapRenderer_render(obj: Pin<&mut MapRenderer>) -> UniquePtr<CxxString>;
fn MapRenderer_setDebugFlags(obj: Pin<&mut MapRenderer>, flags: MapDebugOptions);
fn MapRenderer_setCamera(
obj: Pin<&mut MapRenderer>,
lat: f64,
lon: f64,
zoom: f64,
bearing: f64,
pitch: f64,
);
fn MapRenderer_getStyle_loadURL(obj: Pin<&mut MapRenderer>, url: &str);
}
extern "Rust" {
fn log_from_cpp(severity: EventSeverity, event: Event, code: i64, message: &str);
}
unsafe extern "C++" {
include!("rust_log_observer.h");
fn Log_useLogThread(enable: bool);
}
}