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
//! Macros for adapter dispatching.
use paste;
// Dispatch adapter method call based on `AdapterKind`, avoiding repeated `match` arms.
//
// Usage:
// ```ignore
// dispatch_adapter!(kind, A::some_method(args))
// ```
//
// Inside the provided expression, a type alias `A` is bound to the appropriate
// concrete adapter struct (e.g., `OpenAIAdapter`), allowing static dispatch.
//
// The macro contains the full mapping from every `AdapterKind` variant to
// its corresponding adapter struct, using fully qualified paths.
paste!
pub use dispatch_adapter;