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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
//! # hyperstack-macros
//!
//! Procedural macros for defining HyperStack streams.
//!
//! This crate provides the `#[hyperstack]` attribute macro that transforms
//! annotated Rust structs into full streaming pipeline specifications, including:
//!
//! - State struct generation with field accessors
//! - Handler creation functions for event processing
//! - IDL/Proto parser integration for Solana programs
//! - Automatic AST serialization for deployment
//!
//! ## Module Usage (IDL-based)
//!
//! ```rust,ignore
//! use hyperstack_macros::{hyperstack, Stream};
//!
//! #[hyperstack(idl = "idl.json")]
//! pub mod my_stream {
//! #[entity(name = "MyEntity")]
//! #[derive(Stream)]
//! struct Entity {
//! #[map(from = "MyAccount", field = "value")]
//! pub value: u64,
//! }
//! }
//! ```
//!
//! ## Supported Attributes
//!
//! - `#[map(...)]` - Map from account fields
//! - `#[from_instruction(...)]` - Map from instruction fields
//! - `#[event(...)]` - Capture instruction events
//! - `#[snapshot(...)]` - Capture entire source data
//! - `#[aggregate(...)]` - Aggregate field values
//! - `#[computed(...)]` - Computed fields from other fields
//! - `#[derive_from(...)]` - Derive values from instructions
// Public modules - AST types needed for SDK generation
pub
pub
// Internal modules - not exposed publicly
use TokenStream;
use HashMap;
use ;
// Use the stream_spec module functions
use ;
/// Process a `#[hyperstack(...)]` attribute.
///
/// This macro can be applied to:
/// - A module containing entity structs
/// - A single struct (legacy usage)
///
/// ## Module Usage (IDL-based)
///
/// ```rust,ignore
/// #[hyperstack(idl = "idl.json")]
/// pub mod my_stream {
/// #[entity(name = "MyEntity")]
/// struct Entity {
/// // fields with mapping attributes
/// }
/// }
/// ```
///
/// ## Proto-based Usage
///
/// ```rust,ignore
/// #[hyperstack(proto = ["events.proto"])]
/// pub mod my_stream {
/// // entity structs
/// }
/// ```
/// Derive macro for `Stream`.
///
/// This is a marker derive that enables the following attributes on struct fields:
/// - `#[map(...)]` - Map from account fields
/// - `#[from_instruction(...)]` - Map from instruction fields
/// - `#[event(...)]` - Capture instruction events
/// - `#[snapshot(...)]` - Capture entire source
/// - `#[aggregate(...)]` - Aggregate field values
/// - `#[computed(...)]` - Computed fields from other fields
/// - `#[derive_from(...)]` - Derive values from instructions
/// - `#[resolve(...)]` - Resolve external data (token metadata via DAS API or data from URLs)