@layerzerolabs/framework-solana-anchor-trait 0.2.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/Cargo.toml +18 -0
  2. package/examples/shapes/Anchor.toml +19 -0
  3. package/examples/shapes/macros/Cargo.toml +17 -0
  4. package/examples/shapes/macros/src/instructions/compute_area.rs +50 -0
  5. package/examples/shapes/macros/src/instructions/compute_perimeter.rs +50 -0
  6. package/examples/shapes/macros/src/instructions/get_dimension_count.rs +44 -0
  7. package/examples/shapes/macros/src/instructions/get_name.rs +18 -0
  8. package/examples/shapes/macros/src/instructions/initialize.rs +18 -0
  9. package/examples/shapes/macros/src/instructions/mod.rs +26 -0
  10. package/examples/shapes/macros/src/lib.rs +50 -0
  11. package/examples/shapes/macros/src/shapes.rs +56 -0
  12. package/examples/shapes/programs/ellipse/Cargo.toml +30 -0
  13. package/examples/shapes/programs/ellipse/src/lib.rs +88 -0
  14. package/examples/shapes/programs/ellipse/src/state.rs +9 -0
  15. package/examples/shapes/programs/triangle/Cargo.toml +30 -0
  16. package/examples/shapes/programs/triangle/src/lib.rs +83 -0
  17. package/examples/shapes/programs/triangle/src/state.rs +9 -0
  18. package/package.json +36 -0
  19. package/rust-toolchain.toml +3 -0
  20. package/rustfmt.toml +23 -0
  21. package/src/assembly.rs +63 -0
  22. package/src/generation.rs +226 -0
  23. package/src/lib.rs +126 -0
  24. package/src/overrides.rs +289 -0
  25. package/tests/assembly.rs +339 -0
  26. package/tests/common/mod.rs +206 -0
  27. package/tests/declare_instructions.rs +206 -0
  28. package/tests/generation.rs +358 -0
  29. package/tests/override.rs +414 -0
  30. package/tests/snapshots/snapshots__tests__snapshot_all_defaults.snap +35 -0
  31. package/tests/snapshots/snapshots__tests__snapshot_full_override.snap +47 -0
  32. package/tests/snapshots/snapshots__tests__snapshot_handler_override.snap +42 -0
  33. package/tests/snapshots/snapshots__tests__snapshot_mixed_overrides.snap +57 -0
  34. package/tests/snapshots.rs +139 -0
@@ -0,0 +1,139 @@
1
+ mod common;
2
+
3
+ #[cfg(test)]
4
+ mod tests {
5
+ use super::common::*;
6
+ use anchor_trait::{generate_instructions, Assembly};
7
+ use proc_macro2::TokenStream;
8
+ use quote::quote;
9
+
10
+ /// Run the full pipeline and return prettyplease-formatted output.
11
+ fn assemble_formatted(
12
+ module: &syn::ItemMod,
13
+ prelude: TokenStream,
14
+ extra_mod_attrs: TokenStream,
15
+ ) -> String {
16
+ let overrides = collect_overrides(module);
17
+ let instructions =
18
+ generate_instructions(&TestCtx, &overrides).expect("generate should succeed");
19
+ let assembly = Assembly {
20
+ prelude,
21
+ overrides,
22
+ instructions,
23
+ extra_mod_attrs,
24
+ source_mod: module.clone(),
25
+ };
26
+ let output = assembly.assemble();
27
+ let file = syn::parse2::<syn::File>(output).expect("assembly output should parse");
28
+ prettyplease::unparse(&file)
29
+ }
30
+
31
+ // -----------------------------------------------------------------------
32
+ // Snapshot: all defaults (no overrides, only required lz_receive)
33
+ // -----------------------------------------------------------------------
34
+
35
+ #[test]
36
+ fn snapshot_all_defaults() {
37
+ let module: syn::ItemMod = syn::parse_quote! {
38
+ pub mod my_program {
39
+ #[test_instruction]
40
+ pub fn lz_receive(ctx: Context<MyReceive>, params: LzReceiveParams) -> Result<()> {
41
+ Ok(())
42
+ }
43
+ }
44
+ };
45
+
46
+ let output = assemble_formatted(&module, quote! {}, quote! { #[program] });
47
+ insta::assert_snapshot!(output);
48
+ }
49
+
50
+ // -----------------------------------------------------------------------
51
+ // Snapshot: handler override (custom handler, default accounts)
52
+ // -----------------------------------------------------------------------
53
+
54
+ #[test]
55
+ fn snapshot_handler_override() {
56
+ let module: syn::ItemMod = syn::parse_quote! {
57
+ pub mod my_program {
58
+ #[test_instruction]
59
+ pub fn set_peer(ctx: Context<StdSetPeer>, params: SetPeerParams) -> Result<()> {
60
+ msg!("custom set_peer logic");
61
+ Ok(())
62
+ }
63
+
64
+ #[test_instruction]
65
+ pub fn lz_receive(ctx: Context<MyReceive>, params: LzReceiveParams) -> Result<()> {
66
+ Ok(())
67
+ }
68
+ }
69
+ };
70
+
71
+ let output = assemble_formatted(&module, quote! {}, quote! { #[program] });
72
+ insta::assert_snapshot!(output);
73
+ }
74
+
75
+ // -----------------------------------------------------------------------
76
+ // Snapshot: full override (custom handler + custom accounts)
77
+ // -----------------------------------------------------------------------
78
+
79
+ #[test]
80
+ fn snapshot_full_override() {
81
+ let module: syn::ItemMod = syn::parse_quote! {
82
+ pub mod my_program {
83
+ #[test_instruction]
84
+ pub fn set_peer(ctx: Context<MyCustomAccounts>, params: SetPeerParams) -> Result<()> {
85
+ msg!("fully custom set_peer");
86
+ Ok(())
87
+ }
88
+
89
+ #[test_instruction]
90
+ pub fn lz_receive(ctx: Context<MyReceive>, params: LzReceiveParams) -> Result<()> {
91
+ Ok(())
92
+ }
93
+ }
94
+ };
95
+
96
+ let output = assemble_formatted(&module, quote! {}, quote! { #[program] });
97
+ insta::assert_snapshot!(output);
98
+ }
99
+
100
+ // -----------------------------------------------------------------------
101
+ // Snapshot: mixed (all override levels in one program)
102
+ // -----------------------------------------------------------------------
103
+
104
+ #[test]
105
+ fn snapshot_mixed_overrides() {
106
+ let module: syn::ItemMod = syn::parse_quote! {
107
+ pub mod my_program {
108
+ // Handler override — custom logic, default accounts
109
+ #[test_instruction]
110
+ pub fn set_peer(ctx: Context<StdSetPeer>, params: SetPeerParams) -> Result<()> {
111
+ msg!("handler override set_peer");
112
+ Ok(())
113
+ }
114
+
115
+ // Full override — custom accounts + custom logic
116
+ #[test_instruction]
117
+ pub fn get_peer(ctx: Context<MyCustomGetPeer>, params: GetPeerParams) -> Result<[u8; 32]> {
118
+ Ok([0u8; 32])
119
+ }
120
+
121
+ // Required — must provide
122
+ #[test_instruction]
123
+ pub fn lz_receive(ctx: Context<MyReceive>, params: LzReceiveParams) -> Result<()> {
124
+ Ok(())
125
+ }
126
+
127
+ // Default — token left as-is (no override)
128
+
129
+ // Non-handler items preserved
130
+ pub fn helper() -> u64 { 42 }
131
+ struct MyState { value: u64 }
132
+ }
133
+ };
134
+
135
+ let output =
136
+ assemble_formatted(&module, quote! { struct PreludeMarker; }, quote! { #[program] });
137
+ insta::assert_snapshot!(output);
138
+ }
139
+ }