bmw_derive/
lib.rs

1//! This crate provides three derive macros.
2//!
3//! ```edition2021
4//! # use bmw::{Charger, Gauge, GaugeAdv};
5//! #
6//! #[derive(Gauge)]
7//! # struct BQ27621;
8//!
9//! #[derive(GaugeAdv)]
10//! # struct BQ27z561;
11//!
12//! #[derive(Charger)]
13//! # struct BQ24296;
14//!
15//! # fn main() {}
16//! ```
17//!
18
19mod context;
20
21use context::PowerSupplyContext;
22use proc_macro::TokenStream;
23use syn::{parse_macro_input, DeriveInput};
24
25#[proc_macro_derive(Gauge)]
26pub fn derive_gauge(input: TokenStream) -> TokenStream {
27    let input = parse_macro_input!(input as DeriveInput);
28
29    PowerSupplyContext::new(input, "GaugeBase")
30        .generate()
31        .into()
32}
33
34#[proc_macro_derive(GaugeAdv)]
35pub fn derive_gauge_advance(input: TokenStream) -> TokenStream {
36    let input = parse_macro_input!(input as DeriveInput);
37
38    PowerSupplyContext::new(input, "GaugeAdvance")
39        .generate()
40        .into()
41}
42
43#[proc_macro_derive(Charger)]
44pub fn derive_charger(input: TokenStream) -> TokenStream {
45    let input = parse_macro_input!(input as DeriveInput);
46
47    PowerSupplyContext::new(input, "ChargerBase")
48        .generate()
49        .into()
50}