Skip to main content

libsodium_rs/
version.rs

1//! # Version Information
2//!
3//! This module provides functions to query the version of the libsodium library.
4//!
5//! ## Example
6//!
7//! ```rust
8//! use libsodium_rs as sodium;
9//!
10//! // Get the version string of the libsodium library
11//! let version = sodium::version::version_string();
12//! println!("libsodium version: {}", version);
13//!
14//! // Get the major and minor version numbers
15//! let major = sodium::version::library_version_major();
16//! let minor = sodium::version::library_version_minor();
17//! println!("libsodium version: {}.{}", major, minor);
18//!
19//! // Check if the library meets the minimum requirements
20//! let is_minimal = sodium::version::library_minimal();
21//! println!("Is minimal implementation: {}", is_minimal);
22//! ```
23
24/// The version string of the libsodium library (e.g., "1.0.21")
25pub const VERSION_STRING: &str = "1.0.21";
26
27/// The major version number of the libsodium library
28pub const LIBRARY_VERSION_MAJOR: i32 = 28;
29
30/// The minor version number of the libsodium library
31pub const LIBRARY_VERSION_MINOR: i32 = 0;
32
33/// Returns the version string of the libsodium library
34///
35/// This function returns the version string of the libsodium library, which
36/// typically includes the major and minor version numbers.
37///
38/// ## Example
39///
40/// ```rust
41/// use libsodium_rs as sodium;
42///
43/// let version = sodium::version::version_string();
44/// println!("libsodium version: {}", version);
45/// ```
46///
47/// # Returns
48/// * `&'static str` - The version string of the libsodium library
49pub fn version_string() -> &'static str {
50    unsafe {
51        let ptr = libsodium_sys::sodium_version_string();
52        std::ffi::CStr::from_ptr(ptr)
53            .to_str()
54            .unwrap_or(VERSION_STRING)
55    }
56}
57
58/// Returns the major version number of the libsodium library
59///
60/// This function returns the major version number of the libsodium library.
61///
62/// ## Example
63///
64/// ```rust
65/// use libsodium_rs as sodium;
66///
67/// let major = sodium::version::library_version_major();
68/// println!("libsodium major version: {}", major);
69/// ```
70///
71/// # Returns
72/// * `i32` - The major version number of the libsodium library
73pub fn library_version_major() -> i32 {
74    unsafe { libsodium_sys::sodium_library_version_major() }
75}
76
77/// Returns the minor version number of the libsodium library
78///
79/// This function returns the minor version number of the libsodium library.
80///
81/// ## Example
82///
83/// ```rust
84/// use libsodium_rs as sodium;
85///
86/// let minor = sodium::version::library_version_minor();
87/// println!("libsodium minor version: {}", minor);
88/// ```
89///
90/// # Returns
91/// * `i32` - The minor version number of the libsodium library
92pub fn library_version_minor() -> i32 {
93    unsafe { libsodium_sys::sodium_library_version_minor() }
94}
95
96/// Checks if the library is a minimal implementation
97///
98/// This function checks if the library is a minimal implementation, which
99/// means it only includes the core functionality needed for the most common
100/// use cases.
101///
102/// ## Example
103///
104/// ```rust
105/// use libsodium_rs as sodium;
106///
107/// let is_minimal = sodium::version::library_minimal();
108/// println!("Is minimal implementation: {}", is_minimal);
109/// ```
110///
111/// # Returns
112/// * `bool` - `true` if the library is a minimal implementation, `false` otherwise
113pub fn library_minimal() -> bool {
114    unsafe { libsodium_sys::sodium_library_minimal() != 0 }
115}
116
117#[cfg(test)]
118mod tests {
119    use super::*;
120
121    #[test]
122    fn test_version_string() {
123        let version = version_string();
124        assert!(!version.is_empty());
125        println!("libsodium version: {version}");
126    }
127
128    #[test]
129    fn test_version_numbers() {
130        let major = library_version_major();
131        let minor = library_version_minor();
132        assert!(major >= 0);
133        assert!(minor >= 0);
134        println!("libsodium version: {major}.{minor}");
135    }
136
137    #[test]
138    fn test_library_minimal() {
139        let is_minimal = library_minimal();
140        println!("Is minimal implementation: {is_minimal}");
141    }
142}