Expand description
Raw FFI bindings to CoolProp
§Supported platforms
Linux AArch64Linux x86-64macOS AArch64macOS x86-64Windows AArch64Windows x86-64
§MSRV
coolprop-sys requires rustc 1.85.0 or later.
§How to install
Add this to your Cargo.toml:
[dependencies]
coolprop-sys = "8"Or via command line:
cargo add coolprop-sys🎁 It comes with native CoolProp dynamic libraries for supported platforms. The library
required for your platform will be automatically copied to the target directory during build.
It also includes pre-generated FFI bindings, so libclang is not required for normal builds.
§Regenerating bindings
If you need to regenerate the FFI bindings (requires libclang), enable the
regen-bindings feature.
Add this to your Cargo.toml:
[dependencies]
coolprop-sys = { version = "8", features = ["regen-bindings"] }Or via command line:
cargo add coolprop-sys --features regen-bindings§Accessing the native library
Use the process-wide COOLPROP handle:
use coolprop_sys::COOLPROP;
let coolprop = COOLPROP.shared_access();
let critical_temperature = unsafe { coolprop.Props1SI(c"Water".as_ptr(), c"Tcrit".as_ptr()) };
assert!(critical_temperature.is_finite());- Use
shared_access()only for native operations known to support concurrent execution. - Use
exclusive_access()for configuration and debug changes, global error or warning handling,REFPROPoperations,VTPRconstruction or reload, tabular backends, and operations whose concurrency guarantees are unknown. When in doubt, use exclusive access.
Some native functions report failure through a sentinel value and store details in the
process-global errstring. After such a failure with shared access, release the shared guard,
then acquire exclusive access. If the caller needs error details for that operation, read and
discard the stale errstring with
get_global_param_string (which clears it),
repeat the complete native call, and read the new errstring before releasing the exclusive
guard. If the caller does not need error details, clear the stale errstring before releasing
the exclusive guard; no retry is required.
When an exclusive native call may set a process-global error or warning, keep the same
exclusive guard from that call through retrieval of its errstring or warnstring.
Do not acquire another access guard while one is already held by the same thread. For this
synchronization boundary to be effective, all access to the bundled native library in a
process must go through COOLPROP. Constructing bindings::CoolProp directly bypasses it
and requires equivalent process-wide synchronization from the caller.
§License
This project is licensed under MIT LicenseModules§
- bindings
- Raw FFI bindings to
CoolProp.
Structs§
- Cool
Prop Lib - Process-wide synchronization boundary for the loaded
CoolPropdynamic library. - Exclusive
Access - Exclusive access to native
CoolPropcalls that must not overlap other calls. - Shared
Access - Shared access to native operations known to support concurrent execution.
Constants§
Statics§
- COOLPROP
- Global instance of the
CoolPropdynamic library.