fluidlite_lib/
lib.rs

1/*!
2# Bundled fluidlite library
3
4This crate provides bundled [fluidlite](https://github.com/katyo/fluidlite) C library
5for using with [__fluidlite__](https://crates.io/crates/fluidlite) crate in case
6when system-wide library is not available.
7
8## Usage
9
10You can simply add this as dependency to your manifest:
11
12```toml
13[dependencies]
14fluidlite = "^0.1"
15
16# Use bundled library to avoid unresolved links
17fluidlite-lib = "^0.1"
18```
19
20Next you should say compiler that you want to use that crate:
21
22```rust
23// Either in traditional manner
24extern crate fluidlite_lib;
25
26// Or in Rust2018 manner
27use fluidlite_lib as _;
28```
29
30## Features
31
32You can apply some customizations to library using those features:
33
34- __shared__ Force bundle shared (or dynamic) library instead of static
35- __with-sf3__ Enable SoundFont3 support which requires ogg/vorbis (system or bundled)
36- __with-stb__ Use __stb-vorbis__ instead of Xiph's libogg/libvorbis
37
38 */
39
40#[cfg(test)]
41mod tests {
42    use std::{mem::MaybeUninit, os::raw::c_int};
43
44    extern "C" {
45        pub fn fluid_version(major: *mut c_int, minor: *mut c_int, micro: *mut c_int);
46    }
47
48    #[test]
49    fn library_version() {
50        let mut major = MaybeUninit::<i32>::uninit();
51        let mut minor = MaybeUninit::<i32>::uninit();
52        let mut micro = MaybeUninit::<i32>::uninit();
53
54        unsafe {
55            fluid_version(major.as_mut_ptr(), minor.as_mut_ptr(), micro.as_mut_ptr());
56        }
57
58        let version = unsafe {
59            [
60                major.assume_init(),
61                minor.assume_init(),
62                micro.assume_init(),
63            ]
64        };
65
66        assert_eq!(&version, &[1, 2, 0]);
67    }
68}