nmea0183_derive/lib.rs
1//! # A Rust procedural macro for NMEA 0183-style content parsing
2//!
3//! Based on [`nom-derive`] and with a lot of similarities, `nmea0183-derive` is a custom
4//! derive attribute to derive content parsers for your NMEA 0183-style data structures.
5//!
6//! It is not meant to replace [`nmea0183-parser`], but to work alongside it, providing
7//! a convenient and easy way to derive parsers for your data structures without having
8//! to write boilerplate code.
9//!
10//! [`nmea0183-parser`]: https://crates.io/crates/nmea0183-parser
11//! [`nom-derive`]: https://crates.io/crates/nom-derive
12
13use generate::generate_nmea_parse_impl;
14use proc_macro::TokenStream;
15use syn::{DeriveInput, parse_macro_input};
16
17mod config;
18mod generate;
19mod meta;
20mod parser;
21
22#[doc = include_str!("../README.md")]
23#[proc_macro_derive(NmeaParse, attributes(nmea))]
24pub fn derive_nmea_parse(input: TokenStream) -> TokenStream {
25 let input = parse_macro_input!(input as DeriveInput);
26
27 match generate_nmea_parse_impl(&input) {
28 Ok(tokens) => tokens.into(),
29 Err(err) => err.to_compile_error().into(),
30 }
31}