doctor_syn/lib.rs
1//! Doctor Syn a computer algebra system for rust macros.
2
3pub mod error;
4pub mod expression;
5pub mod name;
6pub mod polynomial;
7pub mod transformation;
8pub mod variablelist;
9pub mod visitor;
10
11#[cfg(test)]
12mod tests;
13
14pub use expression::{Expression, Parity};
15pub use name::Name;
16pub use std::convert::{TryFrom, TryInto};
17pub use variablelist::VariableList;
18pub use error::*;
19
20use num_traits::Float;
21
22pub trait Evaluateable:
23 TryFrom<Expression, Error = error::Error> + TryInto<Expression, Error = error::Error> + Float
24{
25}
26
27impl Evaluateable for f64 {}
28
29impl Evaluateable for f32 {}
30
31// #[cfg(test)]
32// mod test;
33
34// use syn::{parse_macro_input, ExprClosure};
35// use quote::quote;
36
37// /// Example:
38// /// ```
39// /// use doctor_syn::approx;
40// /// fn sin4(x: f64) {
41// /// approx!(|#[min="0"] #[max="2*PI"] #[terms="4"] x| x.sin());
42// /// }
43// /// ```
44// #[proc_macro]
45// pub fn approx(item: TokenStream) -> TokenStream {
46// let clos : ExprClosure = parse_macro_input!(item as ExprClosure);
47// match approx::do_approx(clos) {
48// Ok(res) => quote!(#res).into(),
49// Err(e) => { let e = format!("{:?}", e); quote!(#e).into() }
50// }
51// }