openzeppelin_relayer/api/routes/docs/
relayer_docs.rs

1use crate::{
2    domain::{
3        BalanceResponse, RelayerUpdateRequest, SignDataRequest, SignDataResponse,
4        SignTypedDataRequest,
5    },
6    models::{
7        ApiResponse, DeletePendingTransactionsResponse, JsonRpcRequest, JsonRpcResponse,
8        NetworkRpcRequest, NetworkRpcResult, NetworkTransactionRequest, RelayerResponse,
9        RelayerStatus, TransactionResponse,
10    },
11};
12/// Relayer routes implementation
13///
14/// Note: OpenAPI documentation for these endpoints can be found in the `openapi.rs` file
15///
16/// Lists all relayers with pagination support.
17#[utoipa::path(
18    get,
19    path = "/api/v1/relayers",
20    tag = "Relayers",
21    operation_id = "listRelayers",
22    security(
23        ("bearer_auth" = [])
24    ),
25    params(
26        ("page" = Option<usize>, Query, description = "Page number for pagination (starts at 1)"),
27        ("per_page" = Option<usize>, Query, description = "Number of items per page (default: 10)")
28    ),
29    responses(
30        (
31            status = 200,
32            description = "Relayer list retrieved successfully",
33            body = ApiResponse<Vec<RelayerResponse>>
34        ),
35        (
36            status = 400,
37            description = "BadRequest",
38            body = ApiResponse<String>,
39            example = json!({
40                "success": false,
41                "message": "Bad Request",
42                "data": null
43            })
44        ),
45        (
46            status = 401,
47            description = "Unauthorized",
48            body = ApiResponse<String>,
49            example = json!({
50                "success": false,
51                "message": "Unauthorized",
52                "data": null
53            })
54        ),
55        (
56            status = 429,
57            description = "Too Many Requests",
58            body = ApiResponse<String>,
59            example = json!({
60                "success": false,
61                "message": "Too Many Requests",
62                "data": null
63            })
64        ),
65        (
66            status = 500,
67            description = "Internal server error",
68            body = ApiResponse<String>,
69            example = json!({
70                "success": false,
71                "message": "Internal Server Error",
72                "data": null
73            })
74        ),
75    )
76)]
77#[allow(dead_code)]
78fn doc_list_relayers() {}
79
80/// Retrieves details of a specific relayer by ID.
81#[utoipa::path(
82    get,
83    path = "/api/v1/relayers/{relayer_id}",
84    tag = "Relayers",
85    operation_id = "getRelayer",
86    security(
87        ("bearer_auth" = [])
88    ),
89    params(
90        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
91    ),
92    responses(
93        (
94            status = 200,
95            description = "Relayer details retrieved successfully",
96            body = ApiResponse<RelayerResponse>
97        ),
98        (
99            status = 400,
100            description = "BadRequest",
101            body = ApiResponse<String>,
102            example = json!({
103                "success": false,
104                "message": "Bad Request",
105                "data": null
106            })
107        ),
108        (
109            status = 401,
110            description = "Unauthorized",
111            body = ApiResponse<String>,
112            example = json!({
113                "success": false,
114                "message": "Unauthorized",
115                "data": null
116            })
117        ),
118        (
119            status = 404,
120            description = "Not Found",
121            body = ApiResponse<String>,
122            example = json!({
123                "success": false,
124                "message": "Relayer with ID relayer_id not found",
125                "data": null
126            })
127        ),
128        (
129            status = 429,
130            description = "Too Many Requests",
131            body = ApiResponse<String>,
132            example = json!({
133                "success": false,
134                "message": "Too Many Requests",
135                "data": null
136            })
137        ),
138        (
139            status = 500,
140            description = "Internal server error",
141            body = ApiResponse<String>,
142            example = json!({
143                "success": false,
144                "message": "Internal Server Error",
145                "data": null
146            })
147        ),
148    )
149)]
150#[allow(dead_code)]
151fn doc_get_relayer() {}
152
153/// Updates a relayer's information based on the provided update request.
154#[utoipa::path(
155    patch,
156    path = "/api/v1/relayers/{relayer_id}",
157    tag = "Relayers",
158    operation_id = "updateRelayer",
159    security(
160        ("bearer_auth" = [])
161    ),
162    params(
163        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
164    ),
165    request_body = RelayerUpdateRequest,
166    responses(
167        (status = 200, description = "Relayer updated successfully", body = ApiResponse<RelayerResponse>),
168        (
169            status = 400,
170            description = "BadRequest",
171            body = ApiResponse<String>,
172            example = json!({
173                "success": false,
174                "message": "Bad Request",
175                "data": null
176            })
177        ),
178        (
179            status = 401,
180            description = "Unauthorized",
181            body = ApiResponse<String>,
182            example = json!({
183                "success": false,
184                "message": "Unauthorized",
185                "data": null
186            })
187        ),
188        (
189            status = 404,
190            description = "Not Found",
191            body = ApiResponse<String>,
192            example = json!({
193                "success": false,
194                "message": "Relayer with ID relayer_id not found",
195                "data": null
196            })
197        ),
198        (
199            status = 429,
200            description = "Too Many Requests",
201            body = ApiResponse<String>,
202            example = json!({
203                "success": false,
204                "message": "Too Many Requests",
205                "data": null
206            })
207        ),
208        (
209            status = 500,
210            description = "Internal server error",
211            body = ApiResponse<String>,
212            example = json!({
213                "success": false,
214                "message": "Internal Server Error",
215                "data": null
216            })
217        ),
218    )
219)]
220#[allow(dead_code)]
221fn doc_update_relayer() {}
222
223/// Fetches the current status of a specific relayer.
224#[utoipa::path(
225    get,
226    path = "/api/v1/relayers/{relayer_id}/status",
227    tag = "Relayers",
228    operation_id = "getRelayerStatus",
229    security(
230        ("bearer_auth" = [])
231    ),
232    params(
233        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
234    ),
235    responses(
236        (status = 200, description = "Relayer status retrieved successfully", body = ApiResponse<RelayerStatus>),
237        (
238            status = 400,
239            description = "BadRequest",
240            body = ApiResponse<String>,
241            example = json!({
242                "success": false,
243                "message": "Bad Request",
244                "data": null
245            })
246        ),
247        (
248            status = 401,
249            description = "Unauthorized",
250            body = ApiResponse<String>,
251            example = json!({
252                "success": false,
253                "message": "Unauthorized",
254                "data": null
255            })
256        ),
257        (
258            status = 404,
259            description = "Not Found",
260            body = ApiResponse<String>,
261            example = json!({
262                "success": false,
263                "message": "Relayer with ID relayer_id not found",
264                "data": null
265            })
266        ),
267        (
268            status = 429,
269            description = "Too Many Requests",
270            body = ApiResponse<String>,
271            example = json!({
272                "success": false,
273                "message": "Too Many Requests",
274                "data": null
275            })
276        ),
277        (
278            status = 500,
279            description = "Internal server error",
280            body = ApiResponse<String>,
281            example = json!({
282                "success": false,
283                "message": "Internal Server Error",
284                "data": null
285            })
286        ),
287    )
288)]
289#[allow(dead_code)]
290fn doc_get_relayer_status() {}
291
292/// Retrieves the balance of a specific relayer.
293#[utoipa::path(
294    get,
295    path = "/api/v1/relayers/{relayer_id}/balance",
296    tag = "Relayers",
297    operation_id = "getRelayerBalance",
298    security(
299        ("bearer_auth" = [])
300    ),
301    params(
302        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
303    ),
304    responses(
305        (status = 200, description = "Relayer balance retrieved successfully", body = ApiResponse<BalanceResponse>),
306        (
307            status = 400,
308            description = "BadRequest",
309            body = ApiResponse<String>,
310            example = json!({
311                "success": false,
312                "message": "Bad Request",
313                "data": null
314            })
315        ),
316        (
317            status = 401,
318            description = "Unauthorized",
319            body = ApiResponse<String>,
320            example = json!({
321                "success": false,
322                "message": "Unauthorized",
323                "data": null
324            })
325        ),
326        (
327            status = 404,
328            description = "Not Found",
329            body = ApiResponse<String>,
330            example = json!({
331                "success": false,
332                "message": "Relayer with ID relayer_id not found",
333                "data": null
334            })
335        ),
336        (
337            status = 429,
338            description = "Too Many Requests",
339            body = ApiResponse<String>,
340            example = json!({
341                "success": false,
342                "message": "Too Many Requests",
343                "data": null
344            })
345        ),
346        (
347            status = 500,
348            description = "Internal server error",
349            body = ApiResponse<String>,
350            example = json!({
351                "success": false,
352                "message": "Internal Server Error",
353                "data": null
354            })
355        ),
356    )
357)]
358#[allow(dead_code)]
359fn doc_get_relayer_balance() {}
360
361/// Sends a transaction through the specified relayer.
362#[utoipa::path(
363    post,
364    path = "/api/v1/relayers/{relayer_id}/transactions",
365    tag = "Relayers",
366    operation_id = "sendTransaction",
367    security(
368        ("bearer_auth" = [])
369    ),
370    params(
371        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
372    ),
373    request_body = NetworkTransactionRequest,
374    responses(
375        (status = 200, description = "Relayer transactions sent successfully", body = ApiResponse<TransactionResponse>),
376        (
377            status = 400,
378            description = "BadRequest",
379            body = ApiResponse<String>,
380            example = json!({
381                "success": false,
382                "message": "Bad Request",
383                "data": null
384            })
385        ),
386        (
387            status = 401,
388            description = "Unauthorized",
389            body = ApiResponse<String>,
390            example = json!({
391                "success": false,
392                "message": "Unauthorized",
393                "data": null
394            })
395        ),
396        (
397            status = 404,
398            description = "Not Found",
399            body = ApiResponse<String>,
400            example = json!({
401                "success": false,
402                "message": "Relayer with ID relayer_id not found",
403                "data": null
404            })
405        ),
406        (
407            status = 429,
408            description = "Too Many Requests",
409            body = ApiResponse<String>,
410            example = json!({
411                "success": false,
412                "message": "Too Many Requests",
413                "data": null
414            })
415        ),
416        (
417            status = 500,
418            description = "Internal server error",
419            body = ApiResponse<String>,
420            example = json!({
421                "success": false,
422                "message": "Internal Server Error",
423                "data": null
424            })
425        ),
426    )
427)]
428#[allow(dead_code)]
429fn doc_send_transaction() {}
430
431/// Retrieves a specific transaction by its ID.
432#[utoipa::path(
433    get,
434    path = "/api/v1/relayers/{relayer_id}/transactions/{transaction_id}",
435    operation_id = "getTransactionById",
436    tag = "Relayers",
437    security(
438        ("bearer_auth" = [])
439    ),
440    params(
441        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
442        ("transaction_id" = String, Path, description = "The unique identifier of the transaction")
443    ),
444    responses(
445        (status = 200, description = "Relayer transaction retrieved successfully", body = ApiResponse<TransactionResponse>),
446        (
447            status = 400,
448            description = "BadRequest",
449            body = ApiResponse<String>,
450            example = json!({
451                "success": false,
452                "message": "Bad Request",
453                "data": null
454            })
455        ),
456        (
457            status = 401,
458            description = "Unauthorized",
459            body = ApiResponse<String>,
460            example = json!({
461                "success": false,
462                "message": "Unauthorized",
463                "data": null
464            })
465        ),
466        (
467            status = 429,
468            description = "Too Many Requests",
469            body = ApiResponse<String>,
470            example = json!({
471                "success": false,
472                "message": "Too Many Requests",
473                "data": null
474            })
475        ),
476        (
477            status = 404,
478            description = "Not Found",
479            body = ApiResponse<String>,
480            example = json!({
481                "success": false,
482                "message": "Not Found",
483                "data": null
484            })
485        ),
486        (
487            status = 500,
488            description = "Internal server error",
489            body = ApiResponse<String>,
490            example = json!({
491                "success": false,
492                "message": "Internal Server Error",
493                "data": null
494            })
495        ),
496    )
497)]
498#[allow(dead_code)]
499fn doc_get_transaction_by_id() {}
500
501/// Retrieves a transaction by its nonce value.
502#[utoipa::path(
503    get,
504    path = "/api/v1/relayers/{relayer_id}/transactions/by-nonce/{nonce}",
505    tag = "Relayers",
506    operation_id = "getTransactionByNonce",
507    security(
508        ("bearer_auth" = [])
509    ),
510    params(
511        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
512        ("nonce" = usize, Path, description = "The nonce of the transaction")
513    ),
514    responses(
515        (status = 200, description = "Relayer transaction retrieved successfully", body = ApiResponse<TransactionResponse>),
516        (
517            status = 400,
518            description = "BadRequest",
519            body = ApiResponse<String>,
520            example = json!({
521                "success": false,
522                "message": "Bad Request",
523                "data": null
524            })
525        ),
526        (
527            status = 401,
528            description = "Unauthorized",
529            body = ApiResponse<String>,
530            example = json!({
531                "success": false,
532                "message": "Unauthorized",
533                "data": null
534            })
535        ),
536        (
537            status = 404,
538            description = "Not Found",
539            body = ApiResponse<String>,
540            example = json!({
541                "success": false,
542                "message": "Not found",
543                "data": null
544            })
545        ),
546        (
547            status = 429,
548            description = "Too Many Requests",
549            body = ApiResponse<String>,
550            example = json!({
551                "success": false,
552                "message": "Too Many Requests",
553                "data": null
554            })
555        ),
556        (
557            status = 500,
558            description = "Internal server error",
559            body = ApiResponse<String>,
560            example = json!({
561                "success": false,
562                "message": "Internal Server Error",
563                "data": null
564            })
565        ),
566    )
567)]
568#[allow(dead_code)]
569fn doc_get_transaction_by_nonce() {}
570
571/// Lists all transactions for a specific relayer with pagination.
572#[utoipa::path(
573    get,
574    path = "/api/v1/relayers/{relayer_id}/transactions/",
575    tag = "Relayers",
576    operation_id = "listTransactions",
577    security(
578        ("bearer_auth" = [])
579    ),
580    params(
581        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
582        ("page" = Option<usize>, Query, description = "Page number for pagination (starts at 1)"),
583        ("per_page" = Option<usize>, Query, description = "Number of items per page (default: 10)")
584    ),
585    responses(
586        (status = 200, description = "Relayer transactions retrieved successfully", body = ApiResponse<Vec<TransactionResponse>>),
587        (
588            status = 400,
589            description = "BadRequest",
590            body = ApiResponse<String>,
591            example = json!({
592                "success": false,
593                "message": "Bad Request",
594                "data": null
595            })
596        ),
597        (
598            status = 401,
599            description = "Unauthorized",
600            body = ApiResponse<String>,
601            example = json!({
602                "success": false,
603                "message": "Unauthorized",
604                "data": null
605            })
606        ),
607        (
608            status = 404,
609            description = "Not Found",
610            body = ApiResponse<String>,
611            example = json!({
612                "success": false,
613                "message": "Relayer with ID relayer_id not found",
614                "data": null
615            })
616        ),
617        (
618            status = 429,
619            description = "Too Many Requests",
620            body = ApiResponse<String>,
621            example = json!({
622                "success": false,
623                "message": "Too Many Requests",
624                "data": null
625            })
626        ),
627        (
628            status = 500,
629            description = "Internal server error",
630            body = ApiResponse<String>,
631            example = json!({
632                "success": false,
633                "message": "Internal Server Error",
634                "data": null
635            })
636        ),
637    )
638)]
639#[allow(dead_code)]
640fn doc_list_transactions() {}
641
642/// Deletes all pending transactions for a specific relayer.
643#[utoipa::path(
644    delete,
645    path = "/api/v1/relayers/{relayer_id}/transactions/pending",
646    tag = "Relayers",
647    operation_id = "deletePendingTransactions",
648    security(
649        ("bearer_auth" = [])
650    ),
651    params(
652        ("relayer_id" = String, Path, description = "The unique identifier of the relayer")
653    ),
654    responses(
655        (status = 200, description = "Relayer pending transactions successfully", body = ApiResponse<DeletePendingTransactionsResponse>),
656        (
657            status = 400,
658            description = "BadRequest",
659            body = ApiResponse<String>,
660            example = json!({
661                "success": false,
662                "message": "Bad Request",
663                "data": null
664            })
665        ),
666        (
667            status = 401,
668            description = "Unauthorized",
669            body = ApiResponse<String>,
670            example = json!({
671                "success": false,
672                "message": "Unauthorized",
673                "data": null
674            })
675        ),
676        (
677            status = 404,
678            description = "Not Found",
679            body = ApiResponse<String>,
680            example = json!({
681                "success": false,
682                "message": "Relayer with ID relayer_id not found",
683                "data": null
684            })
685        ),
686        (
687            status = 429,
688            description = "Too Many Requests",
689            body = ApiResponse<String>,
690            example = json!({
691                "success": false,
692                "message": "Too Many Requests",
693                "data": null
694            })
695        ),
696        (
697            status = 500,
698            description = "Internal server error",
699            body = ApiResponse<String>,
700            example = json!({
701                "success": false,
702                "message": "Internal Server Error",
703                "data": null
704            })
705        ),
706    )
707)]
708#[allow(dead_code)]
709fn doc_delete_pending_transactions() {}
710
711/// Cancels a specific transaction by its ID.
712#[utoipa::path(
713    delete,
714    path = "/api/v1/relayers/{relayer_id}/transactions/{transaction_id}",
715    tag = "Relayers",
716    operation_id = "cancelTransaction",
717    security(
718        ("bearer_auth" = [])
719    ),
720    params(
721        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
722        ("transaction_id" = String, Path, description = "The unique identifier of the transaction")
723    ),
724    responses(
725        (status = 200, description = "Relayer transaction canceled successfully", body = ApiResponse<TransactionResponse>),
726        (
727            status = 400,
728            description = "BadRequest",
729            body = ApiResponse<String>,
730            example = json!({
731                "success": false,
732                "message": "Bad Request",
733                "data": null
734            })
735        ),
736        (
737            status = 401,
738            description = "Unauthorized",
739            body = ApiResponse<String>,
740            example = json!({
741                "success": false,
742                "message": "Unauthorized",
743                "data": null
744            })
745        ),
746        (
747            status = 404,
748            description = "Not Found",
749            body = ApiResponse<String>,
750            example = json!({
751                "success": false,
752                "message": "Not found",
753                "data": null
754            })
755        ),
756        (
757            status = 429,
758            description = "Too Many Requests",
759            body = ApiResponse<String>,
760            example = json!({
761                "success": false,
762                "message": "Too Many Requests",
763                "data": null
764            })
765        ),
766        (
767            status = 500,
768            description = "Internal server error",
769            body = ApiResponse<String>,
770            example = json!({
771                "success": false,
772                "message": "Internal Server Error",
773                "data": null
774            })
775        ),
776    )
777)]
778#[allow(dead_code)]
779fn doc_cancel_transaction() {}
780
781/// Replaces a specific transaction with a new one.
782#[utoipa::path(
783    put,
784    path = "/api/v1/relayers/{relayer_id}/transactions/{transaction_id}",
785    tag = "Relayers",
786    operation_id = "replaceTransaction",
787    security(
788        ("bearer_auth" = [])
789    ),
790    params(
791        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
792        ("transaction_id" = String, Path, description = "The unique identifier of the transaction")
793    ),
794    responses(
795        (status = 200, description = "Relayer transaction replaced successfully", body = ApiResponse<TransactionResponse>),
796        (
797            status = 400,
798            description = "BadRequest",
799            body = ApiResponse<String>,
800            example = json!({
801                "success": false,
802                "message": "Bad Request",
803                "data": null
804            })
805        ),
806        (
807            status = 401,
808            description = "Unauthorized",
809            body = ApiResponse<String>,
810            example = json!({
811                "success": false,
812                "message": "Unauthorized",
813                "data": null
814            })
815        ),
816        (
817            status = 404,
818            description = "Not Found",
819            body = ApiResponse<String>,
820            example = json!({
821                "success": false,
822                "message": "Not found",
823                "data": null
824            })
825        ),
826        (
827            status = 429,
828            description = "Too Many Requests",
829            body = ApiResponse<String>,
830            example = json!({
831                "success": false,
832                "message": "Too Many Requests",
833                "data": null
834            })
835        ),
836        (
837            status = 500,
838            description = "Internal server error",
839            body = ApiResponse<String>,
840            example = json!({
841                "success": false,
842                "message": "Internal Server Error",
843                "data": null
844            })
845        ),
846    )
847)]
848#[allow(dead_code)]
849fn doc_replace_transaction() {}
850
851/// Signs data using the specified relayer.
852#[utoipa::path(
853    post,
854    path = "/api/v1/relayers/{relayer_id}/sign",
855    operation_id = "sign",
856    tag = "Relayers",
857    security(
858        ("bearer_auth" = [])
859    ),
860    params(
861        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
862    ),
863    request_body = SignDataRequest,
864    responses(
865        (status = 200, description = "Relayer signed data successfully", body = ApiResponse<SignDataResponse>),
866        (
867            status = 400,
868            description = "BadRequest",
869            body = ApiResponse<String>,
870            example = json!({
871                "success": false,
872                "message": "Bad Request",
873                "data": null
874            })
875        ),
876        (
877            status = 401,
878            description = "Unauthorized",
879            body = ApiResponse<String>,
880            example = json!({
881                "success": false,
882                "message": "Unauthorized",
883                "data": null
884            })
885        ),
886        (
887            status = 404,
888            description = "Not Found",
889            body = ApiResponse<String>,
890            example = json!({
891                "success": false,
892                "message": "Not found",
893                "data": null
894            })
895        ),
896        (
897            status = 429,
898            description = "Too Many Requests",
899            body = ApiResponse<String>,
900            example = json!({
901                "success": false,
902                "message": "Too Many Requests",
903                "data": null
904            })
905        ),
906        (
907            status = 500,
908            description = "Internal server error",
909            body = ApiResponse<String>,
910            example = json!({
911                "success": false,
912                "message": "Internal Server Error",
913                "data": null
914            })
915        ),
916    )
917)]
918#[allow(dead_code)]
919fn doc_sign() {}
920
921/// Signs typed data using the specified relayer.
922#[utoipa::path(
923    post,
924    path = "/api/v1/relayers/{relayer_id}/sign-typed-data",
925    tag = "Relayers",
926    operation_id = "signTypedData",
927    security(
928        ("bearer_auth" = [])
929    ),
930    params(
931        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
932    ),
933    request_body = SignTypedDataRequest,
934    responses(
935        (status = 200, description = "Relayer signed typed data successfully", body = ApiResponse<SignDataResponse>),
936        (
937            status = 400,
938            description = "BadRequest",
939            body = ApiResponse<String>,
940            example = json!({
941                "success": false,
942                "message": "Bad Request",
943                "data": null
944            })
945        ),
946        (
947            status = 401,
948            description = "Unauthorized",
949            body = ApiResponse<String>,
950            example = json!({
951                "success": false,
952                "message": "Unauthorized",
953                "data": null
954            })
955        ),
956        (
957            status = 404,
958            description = "Not Found",
959            body = ApiResponse<String>,
960            example = json!({
961                "success": false,
962                "message": "Relayer with ID relayer_id not found",
963                "data": null
964            })
965        ),
966        (
967            status = 429,
968            description = "Too Many Requests",
969            body = ApiResponse<String>,
970            example = json!({
971                "success": false,
972                "message": "Too Many Requests",
973                "data": null
974            })
975        ),
976        (
977            status = 500,
978            description = "Internal server error",
979            body = ApiResponse<String>,
980            example = json!({
981                "success": false,
982                "message": "Internal Server Error",
983                "data": null
984            })
985        ),
986    )
987)]
988#[allow(dead_code)]
989fn doc_sign_typed_data() {}
990
991/// Performs a JSON-RPC call using the specified relayer.
992#[utoipa::path(
993    post,
994    path = "/api/v1/relayers/{relayer_id}/rpc",
995    tag = "Relayers",
996    operation_id = "rpc",
997    security(
998        ("bearer_auth" = [])
999    ),
1000    params(
1001        ("relayer_id" = String, Path, description = "The unique identifier of the relayer"),
1002    ),
1003    request_body(content = JsonRpcRequest<NetworkRpcRequest>,
1004        description = "JSON-RPC request with method and parameters", content_type = "application/json", example = json!({
1005        "jsonrpc": "2.0",
1006        "method": "feeEstimate",
1007        "params": {
1008            "network": "solana",
1009            "transaction": "base64_encoded_transaction",
1010            "fee_token": "SOL"
1011        },
1012        "id": 1
1013    })),
1014    responses(
1015        (status = 200, description = "RPC method executed successfully", body = JsonRpcResponse<NetworkRpcResult>),
1016        (
1017            status = 400,
1018            description = "BadRequest",
1019            body = ApiResponse<String>,
1020            example = json!({
1021                "success": false,
1022                "message": "Bad Request",
1023                "data": null
1024            })
1025        ),
1026        (
1027            status = 401,
1028            description = "Unauthorized",
1029            body = ApiResponse<String>,
1030            example = json!({
1031                "success": false,
1032                "message": "Unauthorized",
1033                "data": null
1034            })
1035        ),
1036        (
1037            status = 404,
1038            description = "Not Found",
1039            body = ApiResponse<String>,
1040            example = json!({
1041                "success": false,
1042                "message": "Relayer with ID relayer_id not found",
1043                "data": null
1044            })
1045        ),
1046        (
1047            status = 429,
1048            description = "Too Many Requests",
1049            body = ApiResponse<String>,
1050            example = json!({
1051                "success": false,
1052                "message": "Too Many Requests",
1053                "data": null
1054            })
1055        ),
1056        (
1057            status = 500,
1058            description = "Internal server error",
1059            body = ApiResponse<String>,
1060            example = json!({
1061                "success": false,
1062                "message": "Internal Server Error",
1063                "data": null
1064            })
1065        ),
1066    )
1067)]
1068#[allow(dead_code)]
1069fn doc_rpc() {}