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}