1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// The order of these includes is important due to the nature of how the `cpp` crate works. We want
// the C++ includes, helpers and other global stuff to be initialized in order or it might not
// compile correctly.
#[rustfmt::skip]
mod pre {
    mod includes;
    mod helpers;
    mod logger;
}

pub mod builder_config;
pub mod error;
pub mod memory;
pub mod network;
pub mod parser;
pub mod sync;

/// Convenience macro for turning TensorRT error code into a `std::result::Result`.
///
/// # Usage
///
/// There are two possible uses of the macro:
///
/// (1) Shorthand to return `Ok(something)` or the most recent TensorRT error:
///
/// ```ignore
/// result!(return_value);
/// ```
///
/// (2) Shorthand to return `Ok(())` or the most recent TensorRT error:
///
/// ```ignore
/// result!(code)
/// ```
macro_rules! result {
    ($ptr:expr, $ok:expr) => {
        if !$ptr.is_null() {
            Ok($ok)
        } else {
            Err($crate::error::last_error())
        }
    };
    ($ptr:expr) => {
        result!($ptr, ())
    };
}

use result;