Files
ab_glyph_rasterizer
adler
adler32
andrew
bitflags
bytemuck
byteorder
calloop
cfg_if
color_quant
crc32fast
crossbeam_channel
crossbeam_deque
crossbeam_epoch
crossbeam_utils
deflate
dlib
downcast_rs
draw_state
either
event_loop
float
fnv
gfx
gfx_core
gfx_device_gl
gfx_gl
gfx_graphics
gfx_texture
gif
gl
glutin
api
platform
platform_impl
glutin_egl_sys
glutin_glx_sys
glutin_window
graphics
glyph_cache
graphics_api_version
image
codecs
bmp
hdr
ico
jpeg
pnm
tga
webp
imageops
io
math
utils
input
instant
interpolation
iovec
jpeg_decoder
lazy_static
lazycell
libc
unix
libloading
lock_api
log
maybe_uninit
memchr
memmap2
memoffset
miniz_oxide
mio
deprecated
net
sys
mio_extras
net2
nix
net
sys
nom
bits
branch
bytes
character
combinator
multi
number
sequence
num_cpus
num_integer
num_iter
num_rational
num_traits
once_cell
osmesa_sys
owned_ttf_parser
parking_lot
parking_lot_core
percent_encoding
piston
piston_window
png
proc_macro2
quote
raw_window_handle
rayon
collections
compile_fail
iter
chain.rschunks.rscloned.rscopied.rsempty.rsenumerate.rsextend.rsfilter.rsfilter_map.rsfind.rsflat_map.rsflat_map_iter.rsflatten.rsflatten_iter.rsfold.rsfor_each.rsfrom_par_iter.rsinspect.rsinterleave.rsinterleave_shortest.rsintersperse.rslen.rsmap.rsmap_with.rsmod.rsmultizip.rsnoop.rsonce.rspanic_fuse.rspar_bridge.rspositions.rsproduct.rsreduce.rsrepeat.rsrev.rsskip.rssplitter.rsstep_by.rssum.rstake.rstry_fold.rstry_reduce.rstry_reduce_with.rsunzip.rsupdate.rswhile_some.rszip.rszip_eq.rs
slice
rayon_core
compile_fail
join
scope
sleep
spawn
thread_pool
read_color
rusttype
same_file
scoped_threadpool
scoped_tls
scopeguard
serde
de
private
ser
serde_derive
shader_version
shaders_graphics2d
shared_library
slab
smallvec
smithay_client_toolkit
data_device
primary_selection
seat
shell
shm
window
spin_sleep
syn
attr.rsawait.rsbigint.rsbuffer.rscustom_keyword.rscustom_punctuation.rsdata.rsderive.rsdiscouraged.rserror.rsexport.rsexpr.rsext.rsfile.rsgenerics.rsgroup.rsident.rsitem.rslib.rslifetime.rslit.rslookahead.rsmac.rsmacros.rsop.rsparse.rsparse_macro_input.rsparse_quote.rspat.rspath.rsprint.rspunctuated.rsreserved.rssealed.rsspan.rsspanned.rsstmt.rsthread.rstoken.rstt.rsty.rsverbatim.rswhitespace.rs
texture
tiff
ttf_parser
tables
unicode_xid
vecmath
viewport
walkdir
wayland_client
wayland_commons
wayland_cursor
wayland_egl
wayland_protocols
wayland_sys
weezl
window
winit
platform
platform_impl
linux
wayland
event_loop
seat
keyboard
pointer
text_input
touch
window
x11
x11_dl
xcursor
xdg
xml
reader
parser
writer
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#![cfg(any( target_os = "windows", target_os = "linux", target_os = "dragonfly", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd", ))] use libloading::Library; #[cfg(target_os = "windows")] use libloading::os::windows; #[cfg(target_os = "windows")] use winapi::um::libloaderapi::*; use std::ops::{Deref, DerefMut}; use std::sync::Arc; #[derive(Clone)] pub struct SymWrapper<T> { inner: T, _lib: Arc<Library>, } pub trait SymTrait { fn load_with(lib: &Library) -> Self; } impl<T: SymTrait> SymWrapper<T> { pub fn new(lib_paths: Vec<&str>) -> Result<Self, ()> { for path in lib_paths { // Avoid loading from PATH #[cfg(target_os = "windows")] let lib = windows::Library::load_with_flags(path, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS) .map(From::from); #[cfg(not(target_os = "windows"))] let lib = Library::new(path); if lib.is_ok() { return Ok(SymWrapper { inner: T::load_with(lib.as_ref().unwrap()), _lib: Arc::new(lib.unwrap()), }); } } Err(()) } } impl<T> Deref for SymWrapper<T> { type Target = T; fn deref(&self) -> &T { &self.inner } } impl<T> DerefMut for SymWrapper<T> { fn deref_mut(&mut self) -> &mut T { &mut self.inner } }