Skip to main content

polars_rows_iter_derive/
lib.rs

1//! # polars-rows-iter-derive
2//!
3//! This crate exports the macros required by the main polars-rows-iter crate.
4
5mod context;
6mod field_info;
7mod from_dataframe_attribute;
8mod from_dataframe_row_derive;
9mod impl_iter_from_column_for_type;
10mod tuple_iterators;
11
12#[proc_macro_derive(FromDataFrameRow, attributes(column, from_dataframe))]
13pub fn from_dataframe_row_derive_macro(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
14    let ast: syn::DeriveInput = match syn::parse2(input.into()) {
15        Ok(ast) => ast,
16        Err(e) => return e.into_compile_error().into(),
17    };
18    from_dataframe_row_derive::from_dataframe_row_derive_impl(ast)
19        .unwrap_or_else(syn::Error::into_compile_error)
20        .into()
21}
22
23#[proc_macro]
24pub fn iter_from_column_for_type(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
25    let ident: syn::Ident = match syn::parse(input) {
26        Ok(ident) => ident,
27        Err(e) => return e.into_compile_error().into(),
28    };
29    impl_iter_from_column_for_type::create_impl_for(ident)
30}
31
32#[proc_macro]
33pub fn impl_tuple_rows_iter(input_stream: proc_macro::TokenStream) -> proc_macro::TokenStream {
34    let input = syn::parse_macro_input!(input_stream as tuple_iterators::Input);
35    tuple_iterators::create_iterators_and_macro(input.count).into()
36}