moq_derive/
lib.rs

1mod action;
2mod attribute;
3mod automock_macro;
4mod context;
5mod mock;
6mod symbols;
7mod utils;
8mod validate;
9
10use proc_macro::TokenStream;
11
12use crate::automock_macro::automock_impl;
13
14/// Macro that provides mock struct generating that implements trait
15///
16/// ## Example
17/// ```ignore
18/// #[moq::automock]
19/// trait Trait {
20///     fn func(&self, arg: i32) -> String;
21/// }
22///
23/// #[test]
24/// fn test_ok() {
25///     let mock = MockTrait::new()
26///         .expect_func(|arg: i64| {
27///             assert_eq!(arg, 42);
28///             format!("Hello, {}", arg)
29///         })
30///         .expect_func(|arg: i64| {
31///             assert_eq!(arg, -1);
32///             format!("Hello again, {}", -1)
33///         });
34///
35///     mock.func(42);
36///     mock.func(-1);
37/// }
38/// ```
39#[proc_macro_attribute]
40pub fn automock(args: TokenStream, input: TokenStream) -> TokenStream {
41    match automock_impl(args.into(), input.into()) {
42        Ok(tokens) => tokens.into(),
43        Err(diag) => diag.emit_as_item_tokens().into(),
44    }
45}