Skip to main content

pathrex_sys/
lib.rs

1//! Raw FFI bindings for SuiteSparse:GraphBLAS and LAGraph.
2//!
3//! This crate is a `*-sys` crate in the Rust ecosystem sense: it owns the
4//! native build (link directives in `build.rs`) and exposes the bindgen-
5//! generated symbols verbatim. Higher-level safe wrappers, RAII guards, and
6//! Rust APIs live in the `pathrex` crate.
7//!
8//! Bindings are generated from the LAGraph headers in `deps/LAGraph/include`
9//! and the system-installed `GraphBLAS.h`. The generated file
10//! `src/lagraph_sys_generated.rs` is checked in; regenerate it with
11//! `cargo build --features regenerate-bindings` (requires `libclang`).
12
13#![allow(
14    non_camel_case_types,
15    non_snake_case,
16    non_upper_case_globals,
17    dead_code,
18    clippy::all
19)]
20
21include!("lagraph_sys_generated.rs");
22
23use core::fmt;
24
25impl fmt::Display for GrB_Info {
26    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27        match self {
28            GrB_Info::GrB_SUCCESS => write!(f, "GrB_SUCCESS"),
29            GrB_Info::GrB_NO_VALUE => write!(f, "GrB_NO_VALUE"),
30            GrB_Info::GxB_EXHAUSTED => write!(f, "GxB_EXHAUSTED"),
31            GrB_Info::GrB_UNINITIALIZED_OBJECT => write!(f, "GrB_UNINITIALIZED_OBJECT"),
32            GrB_Info::GrB_NULL_POINTER => write!(f, "GrB_NULL_POINTER"),
33            GrB_Info::GrB_INVALID_VALUE => write!(f, "GrB_INVALID_VALUE"),
34            GrB_Info::GrB_INVALID_INDEX => write!(f, "GrB_INVALID_INDEX"),
35            GrB_Info::GrB_DOMAIN_MISMATCH => write!(f, "GrB_DOMAIN_MISMATCH"),
36            GrB_Info::GrB_DIMENSION_MISMATCH => write!(f, "GrB_DIMENSION_MISMATCH"),
37            GrB_Info::GrB_OUTPUT_NOT_EMPTY => write!(f, "GrB_OUTPUT_NOT_EMPTY"),
38            GrB_Info::GrB_NOT_IMPLEMENTED => write!(f, "GrB_NOT_IMPLEMENTED"),
39            GrB_Info::GrB_ALREADY_SET => write!(f, "GrB_ALREADY_SET"),
40            GrB_Info::GrB_PANIC => write!(f, "GrB_PANIC"),
41            GrB_Info::GrB_OUT_OF_MEMORY => write!(f, "GrB_OUT_OF_MEMORY"),
42            GrB_Info::GrB_INSUFFICIENT_SPACE => write!(f, "GrB_INSUFFICIENT_SPACE"),
43            GrB_Info::GrB_INVALID_OBJECT => write!(f, "GrB_INVALID_OBJECT"),
44            GrB_Info::GrB_INDEX_OUT_OF_BOUNDS => write!(f, "GrB_INDEX_OUT_OF_BOUNDS"),
45            GrB_Info::GrB_EMPTY_OBJECT => write!(f, "GrB_EMPTY_OBJECT"),
46            GrB_Info::GxB_JIT_ERROR => write!(f, "GxB_JIT_ERROR"),
47            GrB_Info::GxB_GPU_ERROR => write!(f, "GxB_GPU_ERROR"),
48            GrB_Info::GxB_OUTPUT_IS_READONLY => write!(f, "GxB_OUTPUT_IS_READONLY"),
49        }
50    }
51}
52
53impl From<i32> for GrB_Info {
54    fn from(value: i32) -> Self {
55        match value {
56            0 => GrB_Info::GrB_SUCCESS,
57            1 => GrB_Info::GrB_NO_VALUE,
58            7 => GrB_Info::GxB_EXHAUSTED,
59            -1 => GrB_Info::GrB_UNINITIALIZED_OBJECT,
60            -2 => GrB_Info::GrB_NULL_POINTER,
61            -3 => GrB_Info::GrB_INVALID_VALUE,
62            -4 => GrB_Info::GrB_INVALID_INDEX,
63            -5 => GrB_Info::GrB_DOMAIN_MISMATCH,
64            -6 => GrB_Info::GrB_DIMENSION_MISMATCH,
65            -7 => GrB_Info::GrB_OUTPUT_NOT_EMPTY,
66            -8 => GrB_Info::GrB_NOT_IMPLEMENTED,
67            -9 => GrB_Info::GrB_ALREADY_SET,
68            -101 => GrB_Info::GrB_PANIC,
69            -102 => GrB_Info::GrB_OUT_OF_MEMORY,
70            -103 => GrB_Info::GrB_INSUFFICIENT_SPACE,
71            -104 => GrB_Info::GrB_INVALID_OBJECT,
72            -105 => GrB_Info::GrB_INDEX_OUT_OF_BOUNDS,
73            -106 => GrB_Info::GrB_EMPTY_OBJECT,
74            -7001 => GrB_Info::GxB_JIT_ERROR,
75            -7002 => GrB_Info::GxB_GPU_ERROR,
76            -7003 => GrB_Info::GxB_OUTPUT_IS_READONLY,
77            _ => unimplemented!("Hope no more GrB status codes!"),
78        }
79    }
80}