zephyr_sys/
lib.rs

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
49
// Copyright (c) 2024 Linaro LTD
// SPDX-License-Identifier: Apache-2.0

//! Zephyr application support for Rust
//!
//! This crates provides the core functionality for applications written in Rust that run on top of
//! Zephyr.

#![no_std]

// Allow rust naming convention violations.
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]

// Zephyr makes use of zero-sized structs, which Rustc considers invalid.  Suppress this warning.
// Note, however, that this suppresses any warnings in the bindings about improper C types.
#![allow(improper_ctypes)]

#![allow(rustdoc::broken_intra_doc_links)]

include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

// We have directed bindgen to not generate copy for any times.  It unfortunately doesn't have an
// easy mechanism to enable just for a few types.

// Fortunately, it isn't difficult to mostly auto-derive copy/clone.
macro_rules! derive_clone {
    ($($t:ty),+ $(,)?) => {
        $(
            impl Clone for $t {
                fn clone(&self) -> $t {
                    *self
                }
            }
        )+
    };
}

macro_rules! derive_copy {
    ($($t:ty),+ $(,)?) => {
        $(
            impl Copy for $t {}
        )+
    }
}

derive_copy!(z_spinlock_key);
derive_clone!(z_spinlock_key);