Skip to main content

Crate coolprop_sys

Crate coolprop_sys 

Source
Expand description

GitHub docs.rs crates.io CI

Raw FFI bindings to CoolProp

§Supported platforms

  • Linux AArch64
  • Linux x86-64
  • macOS AArch64
  • macOS x86-64
  • Windows AArch64
  • Windows 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, REFPROP operations, VTPR construction 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 License

Modules§

bindings
Raw FFI bindings to CoolProp.

Structs§

CoolPropLib
Process-wide synchronization boundary for the loaded CoolProp dynamic library.
ExclusiveAccess
Exclusive access to native CoolProp calls that must not overlap other calls.
SharedAccess
Shared access to native operations known to support concurrent execution.

Constants§

COOLPROP_PATH

Statics§

COOLPROP
Global instance of the CoolProp dynamic library.