1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright © 2025 Stephan Kunz
//! Derive macro [`Behavior`] for `behaviortree`
//!
extern crate proc_macro;
extern crate alloc;
use derive_behavior_struct;
use TokenStream;
use DeriveInput;
/// Derive macro for [`Behavior`].
///
/// # Usage
/// ```no_test
/// #[derive(Behavior)]
/// struct MyBehavior {
/// // specific elements
/// ...
/// }
///
/// impl MyBehavior {
/// // specific implementations
/// ...
/// }
/// ```
///
/// # Result
/// Expands the above example to
/// ```no_test
/// struct MyBehavior {
/// // specific elements
/// ...
/// }
///
/// impl MyBehavior {
/// // specific implementations
/// ...
/// }
///
/// #[automatically_derived]
/// #[diagnostic::do_not_recommend]
/// impl behaviortree::behavior::Behavior for MyBehavior {}
///
/// #[automatically_derived]
/// #[diagnostic::do_not_recommend]
/// impl behaviortree::behavior::BehaviorCreation for Fallback {
/// fn creation_fn() -> alloc::boxed::Box<behaviortree::behavior::BehaviorCreationFn> {
/// alloc::boxed::Box::new(|| alloc::boxed::Box::new(Self::default()))
/// }
/// }
///
/// #[automatically_derived]
/// #[diagnostic::do_not_recommend]
/// impl behaviortree::behavior::BehaviorExecution for MyBehavior {
/// fn as_any(&self) -> &dyn core::any::AnyAny { self }
/// fn as_any_mut(&mut self) -> &mut dyn core::any::AnyAny { self }
/// }
///
/// #[automatically_derived]
/// #[diagnostic::do_not_recommend]
/// impl behaviortree::behavior::BehaviorRedirection for MyBehavior {
/// fn static_provided_ports(&self) -> behaviortree::port::PortList {
/// Self::provided_ports()
/// }
/// }
/// ```
///
/// # Errors
///
/// # Panics
/// - if used on enums or unions