Skip to main content

barse_derive/
lib.rs

1//! Procedural macros for barse.
2
3#![warn(
4    clippy::all,
5    clippy::pedantic,
6    clippy::perf,
7    clippy::style,
8    clippy::disallowed_types,
9    clippy::indexing_slicing,
10    clippy::clone_on_ref_ptr,
11    clippy::create_dir,
12    clippy::default_numeric_fallback,
13    clippy::empty_drop,
14    clippy::empty_structs_with_brackets,
15    clippy::unwrap_used,
16    clippy::expect_used,
17    clippy::float_equality_without_abs,
18    clippy::float_cmp,
19    clippy::float_cmp_const,
20    clippy::format_push_string,
21    clippy::get_unwrap,
22    clippy::if_then_some_else_none,
23    clippy::impl_trait_in_params,
24    clippy::mixed_read_write_in_expression,
25    clippy::mod_module_files,
26    clippy::multiple_unsafe_ops_per_block,
27    clippy::undocumented_unsafe_blocks,
28    clippy::partial_pub_fields,
29    clippy::panic,
30    clippy::semicolon_if_nothing_returned,
31    clippy::semicolon_inside_block,
32    clippy::str_to_string,
33    clippy::todo,
34    clippy::try_err,
35    clippy::unneeded_field_pattern,
36    clippy::unseparated_literal_suffix,
37    clippy::fallible_impl_from,
38    clippy::future_not_send,
39    clippy::option_if_let_else,
40    clippy::or_fun_call,
41    clippy::path_buf_push_overwrite,
42    clippy::redundant_pub_crate,
43    clippy::redundant_allocation,
44    clippy::significant_drop_tightening,
45    clippy::useless_let_if_seq,
46    rustdoc::all,
47    missing_copy_implementations,
48    missing_debug_implementations,
49    missing_docs
50)]
51
52use proc_macro::TokenStream;
53
54/// Derive a `FromByteReader` implementation.
55#[proc_macro_derive(FromByteReader, attributes(barse))]
56pub fn derive_from_byte_reader(item: TokenStream) -> TokenStream {
57    barse_derive_impl::derive_from_byte_reader(item.into()).into()
58}
59
60/// Create a `ByteSizeQuery` implementor from a function.
61#[proc_macro_attribute]
62pub fn byte_size_query(attr: TokenStream, item: TokenStream) -> TokenStream {
63    barse_derive_impl::byte_size_query(attr.into(), item.into()).into()
64}
65
66/// Create a Condition implementor from a function.
67#[proc_macro_attribute]
68pub fn condition(attr: TokenStream, item: TokenStream) -> TokenStream {
69    barse_derive_impl::condition(attr.into(), item.into()).into()
70}
71
72/// Create a `VecLenQuery` implementor from a function.
73#[proc_macro_attribute]
74pub fn vec_len_query(attr: TokenStream, item: TokenStream) -> TokenStream {
75    barse_derive_impl::vec_len_query(attr.into(), item.into()).into()
76}