Skip to main content

harn_hostlib/
schemas.rs

1//! Embedded JSON Schemas for every hostlib host method.
2//!
3//! Schemas live at `schemas/<module>/<method>.{request,response}.json` and
4//! are baked into the crate at compile time via `include_str!`. They're the
5//! source of truth for hostlib request/response compatibility: the schema
6//! files ship with the crate (see the `include` field in `Cargo.toml`),
7//! and consumers fetch them through this module.
8//!
9//! Schemas use JSON Schema draft 2020-12.
10
11/// Direction of a schema (request body vs. response body).
12#[derive(Clone, Copy, Debug, PartialEq, Eq)]
13pub enum SchemaKind {
14    /// Schema for the *input* of a host method.
15    Request,
16    /// Schema for the *output* of a host method.
17    Response,
18}
19
20/// One `(module, method, kind, schema_text)` tuple for every shipped schema.
21///
22/// Embedders use this catalog to:
23/// - assert that every registered builtin has a matching schema (drift test);
24/// - export the schemas to downstream consumers;
25/// - validate live request/response payloads in tests.
26pub const SCHEMAS: &[(&str, &str, SchemaKind, &str)] = &[
27    // ast/
28    (
29        "ast",
30        "parse_file",
31        SchemaKind::Request,
32        include_str!("../schemas/ast/parse_file.request.json"),
33    ),
34    (
35        "ast",
36        "parse_file",
37        SchemaKind::Response,
38        include_str!("../schemas/ast/parse_file.response.json"),
39    ),
40    (
41        "ast",
42        "symbols",
43        SchemaKind::Request,
44        include_str!("../schemas/ast/symbols.request.json"),
45    ),
46    (
47        "ast",
48        "symbols",
49        SchemaKind::Response,
50        include_str!("../schemas/ast/symbols.response.json"),
51    ),
52    (
53        "ast",
54        "outline",
55        SchemaKind::Request,
56        include_str!("../schemas/ast/outline.request.json"),
57    ),
58    (
59        "ast",
60        "outline",
61        SchemaKind::Response,
62        include_str!("../schemas/ast/outline.response.json"),
63    ),
64    (
65        "ast",
66        "parse_errors",
67        SchemaKind::Request,
68        include_str!("../schemas/ast/parse_errors.request.json"),
69    ),
70    (
71        "ast",
72        "parse_errors",
73        SchemaKind::Response,
74        include_str!("../schemas/ast/parse_errors.response.json"),
75    ),
76    (
77        "ast",
78        "undefined_names",
79        SchemaKind::Request,
80        include_str!("../schemas/ast/undefined_names.request.json"),
81    ),
82    (
83        "ast",
84        "undefined_names",
85        SchemaKind::Response,
86        include_str!("../schemas/ast/undefined_names.response.json"),
87    ),
88    (
89        "ast",
90        "function_body",
91        SchemaKind::Request,
92        include_str!("../schemas/ast/function_body.request.json"),
93    ),
94    (
95        "ast",
96        "function_body",
97        SchemaKind::Response,
98        include_str!("../schemas/ast/function_body.response.json"),
99    ),
100    (
101        "ast",
102        "function_bodies",
103        SchemaKind::Request,
104        include_str!("../schemas/ast/function_bodies.request.json"),
105    ),
106    (
107        "ast",
108        "function_bodies",
109        SchemaKind::Response,
110        include_str!("../schemas/ast/function_bodies.response.json"),
111    ),
112    (
113        "ast",
114        "extract_imports",
115        SchemaKind::Request,
116        include_str!("../schemas/ast/extract_imports.request.json"),
117    ),
118    (
119        "ast",
120        "extract_imports",
121        SchemaKind::Response,
122        include_str!("../schemas/ast/extract_imports.response.json"),
123    ),
124    (
125        "ast",
126        "symbol_extract",
127        SchemaKind::Request,
128        include_str!("../schemas/ast/symbol_extract.request.json"),
129    ),
130    (
131        "ast",
132        "symbol_extract",
133        SchemaKind::Response,
134        include_str!("../schemas/ast/symbol_extract.response.json"),
135    ),
136    (
137        "ast",
138        "symbol_delete",
139        SchemaKind::Request,
140        include_str!("../schemas/ast/symbol_delete.request.json"),
141    ),
142    (
143        "ast",
144        "symbol_delete",
145        SchemaKind::Response,
146        include_str!("../schemas/ast/symbol_delete.response.json"),
147    ),
148    (
149        "ast",
150        "symbol_replace",
151        SchemaKind::Request,
152        include_str!("../schemas/ast/symbol_replace.request.json"),
153    ),
154    (
155        "ast",
156        "symbol_replace",
157        SchemaKind::Response,
158        include_str!("../schemas/ast/symbol_replace.response.json"),
159    ),
160    (
161        "ast",
162        "bracket_balance",
163        SchemaKind::Request,
164        include_str!("../schemas/ast/bracket_balance.request.json"),
165    ),
166    (
167        "ast",
168        "bracket_balance",
169        SchemaKind::Response,
170        include_str!("../schemas/ast/bracket_balance.response.json"),
171    ),
172    // code_index/
173    (
174        "code_index",
175        "query",
176        SchemaKind::Request,
177        include_str!("../schemas/code_index/query.request.json"),
178    ),
179    (
180        "code_index",
181        "query",
182        SchemaKind::Response,
183        include_str!("../schemas/code_index/query.response.json"),
184    ),
185    (
186        "code_index",
187        "rebuild",
188        SchemaKind::Request,
189        include_str!("../schemas/code_index/rebuild.request.json"),
190    ),
191    (
192        "code_index",
193        "rebuild",
194        SchemaKind::Response,
195        include_str!("../schemas/code_index/rebuild.response.json"),
196    ),
197    (
198        "code_index",
199        "stats",
200        SchemaKind::Request,
201        include_str!("../schemas/code_index/stats.request.json"),
202    ),
203    (
204        "code_index",
205        "stats",
206        SchemaKind::Response,
207        include_str!("../schemas/code_index/stats.response.json"),
208    ),
209    (
210        "code_index",
211        "imports_for",
212        SchemaKind::Request,
213        include_str!("../schemas/code_index/imports_for.request.json"),
214    ),
215    (
216        "code_index",
217        "imports_for",
218        SchemaKind::Response,
219        include_str!("../schemas/code_index/imports_for.response.json"),
220    ),
221    (
222        "code_index",
223        "importers_of",
224        SchemaKind::Request,
225        include_str!("../schemas/code_index/importers_of.request.json"),
226    ),
227    (
228        "code_index",
229        "importers_of",
230        SchemaKind::Response,
231        include_str!("../schemas/code_index/importers_of.response.json"),
232    ),
233    // code_index — file table accessors
234    (
235        "code_index",
236        "path_to_id",
237        SchemaKind::Request,
238        include_str!("../schemas/code_index/path_to_id.request.json"),
239    ),
240    (
241        "code_index",
242        "path_to_id",
243        SchemaKind::Response,
244        include_str!("../schemas/code_index/path_to_id.response.json"),
245    ),
246    (
247        "code_index",
248        "id_to_path",
249        SchemaKind::Request,
250        include_str!("../schemas/code_index/id_to_path.request.json"),
251    ),
252    (
253        "code_index",
254        "id_to_path",
255        SchemaKind::Response,
256        include_str!("../schemas/code_index/id_to_path.response.json"),
257    ),
258    (
259        "code_index",
260        "file_ids",
261        SchemaKind::Request,
262        include_str!("../schemas/code_index/file_ids.request.json"),
263    ),
264    (
265        "code_index",
266        "file_ids",
267        SchemaKind::Response,
268        include_str!("../schemas/code_index/file_ids.response.json"),
269    ),
270    (
271        "code_index",
272        "file_meta",
273        SchemaKind::Request,
274        include_str!("../schemas/code_index/file_meta.request.json"),
275    ),
276    (
277        "code_index",
278        "file_meta",
279        SchemaKind::Response,
280        include_str!("../schemas/code_index/file_meta.response.json"),
281    ),
282    (
283        "code_index",
284        "file_hash",
285        SchemaKind::Request,
286        include_str!("../schemas/code_index/file_hash.request.json"),
287    ),
288    (
289        "code_index",
290        "file_hash",
291        SchemaKind::Response,
292        include_str!("../schemas/code_index/file_hash.response.json"),
293    ),
294    // code_index — cached reads
295    (
296        "code_index",
297        "read_range",
298        SchemaKind::Request,
299        include_str!("../schemas/code_index/read_range.request.json"),
300    ),
301    (
302        "code_index",
303        "read_range",
304        SchemaKind::Response,
305        include_str!("../schemas/code_index/read_range.response.json"),
306    ),
307    (
308        "code_index",
309        "reindex_file",
310        SchemaKind::Request,
311        include_str!("../schemas/code_index/reindex_file.request.json"),
312    ),
313    (
314        "code_index",
315        "reindex_file",
316        SchemaKind::Response,
317        include_str!("../schemas/code_index/reindex_file.response.json"),
318    ),
319    (
320        "code_index",
321        "trigram_query",
322        SchemaKind::Request,
323        include_str!("../schemas/code_index/trigram_query.request.json"),
324    ),
325    (
326        "code_index",
327        "trigram_query",
328        SchemaKind::Response,
329        include_str!("../schemas/code_index/trigram_query.response.json"),
330    ),
331    (
332        "code_index",
333        "extract_trigrams",
334        SchemaKind::Request,
335        include_str!("../schemas/code_index/extract_trigrams.request.json"),
336    ),
337    (
338        "code_index",
339        "extract_trigrams",
340        SchemaKind::Response,
341        include_str!("../schemas/code_index/extract_trigrams.response.json"),
342    ),
343    (
344        "code_index",
345        "word_get",
346        SchemaKind::Request,
347        include_str!("../schemas/code_index/word_get.request.json"),
348    ),
349    (
350        "code_index",
351        "word_get",
352        SchemaKind::Response,
353        include_str!("../schemas/code_index/word_get.response.json"),
354    ),
355    (
356        "code_index",
357        "deps_get",
358        SchemaKind::Request,
359        include_str!("../schemas/code_index/deps_get.request.json"),
360    ),
361    (
362        "code_index",
363        "deps_get",
364        SchemaKind::Response,
365        include_str!("../schemas/code_index/deps_get.response.json"),
366    ),
367    (
368        "code_index",
369        "outline_get",
370        SchemaKind::Request,
371        include_str!("../schemas/code_index/outline_get.request.json"),
372    ),
373    (
374        "code_index",
375        "outline_get",
376        SchemaKind::Response,
377        include_str!("../schemas/code_index/outline_get.response.json"),
378    ),
379    // code_index — change log
380    (
381        "code_index",
382        "current_seq",
383        SchemaKind::Request,
384        include_str!("../schemas/code_index/current_seq.request.json"),
385    ),
386    (
387        "code_index",
388        "current_seq",
389        SchemaKind::Response,
390        include_str!("../schemas/code_index/current_seq.response.json"),
391    ),
392    (
393        "code_index",
394        "changes_since",
395        SchemaKind::Request,
396        include_str!("../schemas/code_index/changes_since.request.json"),
397    ),
398    (
399        "code_index",
400        "changes_since",
401        SchemaKind::Response,
402        include_str!("../schemas/code_index/changes_since.response.json"),
403    ),
404    (
405        "code_index",
406        "version_record",
407        SchemaKind::Request,
408        include_str!("../schemas/code_index/version_record.request.json"),
409    ),
410    (
411        "code_index",
412        "version_record",
413        SchemaKind::Response,
414        include_str!("../schemas/code_index/version_record.response.json"),
415    ),
416    // code_index — agents + locks
417    (
418        "code_index",
419        "agent_register",
420        SchemaKind::Request,
421        include_str!("../schemas/code_index/agent_register.request.json"),
422    ),
423    (
424        "code_index",
425        "agent_register",
426        SchemaKind::Response,
427        include_str!("../schemas/code_index/agent_register.response.json"),
428    ),
429    (
430        "code_index",
431        "agent_heartbeat",
432        SchemaKind::Request,
433        include_str!("../schemas/code_index/agent_heartbeat.request.json"),
434    ),
435    (
436        "code_index",
437        "agent_heartbeat",
438        SchemaKind::Response,
439        include_str!("../schemas/code_index/agent_heartbeat.response.json"),
440    ),
441    (
442        "code_index",
443        "agent_unregister",
444        SchemaKind::Request,
445        include_str!("../schemas/code_index/agent_unregister.request.json"),
446    ),
447    (
448        "code_index",
449        "agent_unregister",
450        SchemaKind::Response,
451        include_str!("../schemas/code_index/agent_unregister.response.json"),
452    ),
453    (
454        "code_index",
455        "lock_try",
456        SchemaKind::Request,
457        include_str!("../schemas/code_index/lock_try.request.json"),
458    ),
459    (
460        "code_index",
461        "lock_try",
462        SchemaKind::Response,
463        include_str!("../schemas/code_index/lock_try.response.json"),
464    ),
465    (
466        "code_index",
467        "lock_release",
468        SchemaKind::Request,
469        include_str!("../schemas/code_index/lock_release.request.json"),
470    ),
471    (
472        "code_index",
473        "lock_release",
474        SchemaKind::Response,
475        include_str!("../schemas/code_index/lock_release.response.json"),
476    ),
477    (
478        "code_index",
479        "status",
480        SchemaKind::Request,
481        include_str!("../schemas/code_index/status.request.json"),
482    ),
483    (
484        "code_index",
485        "status",
486        SchemaKind::Response,
487        include_str!("../schemas/code_index/status.response.json"),
488    ),
489    (
490        "code_index",
491        "current_agent_id",
492        SchemaKind::Request,
493        include_str!("../schemas/code_index/current_agent_id.request.json"),
494    ),
495    (
496        "code_index",
497        "current_agent_id",
498        SchemaKind::Response,
499        include_str!("../schemas/code_index/current_agent_id.response.json"),
500    ),
501    (
502        "code_index",
503        "cypher",
504        SchemaKind::Request,
505        include_str!("../schemas/code_index/cypher.request.json"),
506    ),
507    (
508        "code_index",
509        "cypher",
510        SchemaKind::Response,
511        include_str!("../schemas/code_index/cypher.response.json"),
512    ),
513    (
514        "code_index",
515        "branch_overlay",
516        SchemaKind::Request,
517        include_str!("../schemas/code_index/branch_overlay.request.json"),
518    ),
519    (
520        "code_index",
521        "branch_overlay",
522        SchemaKind::Response,
523        include_str!("../schemas/code_index/branch_overlay.response.json"),
524    ),
525    (
526        "code_index",
527        "freshness",
528        SchemaKind::Request,
529        include_str!("../schemas/code_index/freshness.request.json"),
530    ),
531    (
532        "code_index",
533        "freshness",
534        SchemaKind::Response,
535        include_str!("../schemas/code_index/freshness.response.json"),
536    ),
537    // scanner/
538    (
539        "scanner",
540        "scan_project",
541        SchemaKind::Request,
542        include_str!("../schemas/scanner/scan_project.request.json"),
543    ),
544    (
545        "scanner",
546        "scan_project",
547        SchemaKind::Response,
548        include_str!("../schemas/scanner/scan_project.response.json"),
549    ),
550    (
551        "scanner",
552        "scan_incremental",
553        SchemaKind::Request,
554        include_str!("../schemas/scanner/scan_incremental.request.json"),
555    ),
556    (
557        "scanner",
558        "scan_incremental",
559        SchemaKind::Response,
560        include_str!("../schemas/scanner/scan_incremental.response.json"),
561    ),
562    // fs/
563    (
564        "fs",
565        "set_mode",
566        SchemaKind::Request,
567        include_str!("../schemas/fs/set_mode.request.json"),
568    ),
569    (
570        "fs",
571        "set_mode",
572        SchemaKind::Response,
573        include_str!("../schemas/fs/set_mode.response.json"),
574    ),
575    (
576        "fs",
577        "staged_status",
578        SchemaKind::Request,
579        include_str!("../schemas/fs/staged_status.request.json"),
580    ),
581    (
582        "fs",
583        "staged_status",
584        SchemaKind::Response,
585        include_str!("../schemas/fs/staged_status.response.json"),
586    ),
587    (
588        "fs",
589        "commit_staged",
590        SchemaKind::Request,
591        include_str!("../schemas/fs/commit_staged.request.json"),
592    ),
593    (
594        "fs",
595        "commit_staged",
596        SchemaKind::Response,
597        include_str!("../schemas/fs/commit_staged.response.json"),
598    ),
599    (
600        "fs",
601        "discard_staged",
602        SchemaKind::Request,
603        include_str!("../schemas/fs/discard_staged.request.json"),
604    ),
605    (
606        "fs",
607        "discard_staged",
608        SchemaKind::Response,
609        include_str!("../schemas/fs/discard_staged.response.json"),
610    ),
611    (
612        "fs",
613        "snapshot",
614        SchemaKind::Request,
615        include_str!("../schemas/fs/snapshot.request.json"),
616    ),
617    (
618        "fs",
619        "snapshot",
620        SchemaKind::Response,
621        include_str!("../schemas/fs/snapshot.response.json"),
622    ),
623    (
624        "fs",
625        "restore",
626        SchemaKind::Request,
627        include_str!("../schemas/fs/restore.request.json"),
628    ),
629    (
630        "fs",
631        "restore",
632        SchemaKind::Response,
633        include_str!("../schemas/fs/restore.response.json"),
634    ),
635    (
636        "fs",
637        "list_snapshots",
638        SchemaKind::Request,
639        include_str!("../schemas/fs/list_snapshots.request.json"),
640    ),
641    (
642        "fs",
643        "list_snapshots",
644        SchemaKind::Response,
645        include_str!("../schemas/fs/list_snapshots.response.json"),
646    ),
647    (
648        "fs",
649        "drop_snapshot",
650        SchemaKind::Request,
651        include_str!("../schemas/fs/drop_snapshot.request.json"),
652    ),
653    (
654        "fs",
655        "drop_snapshot",
656        SchemaKind::Response,
657        include_str!("../schemas/fs/drop_snapshot.response.json"),
658    ),
659    // fs_watch/
660    (
661        "fs_watch",
662        "subscribe",
663        SchemaKind::Request,
664        include_str!("../schemas/fs_watch/subscribe.request.json"),
665    ),
666    (
667        "fs_watch",
668        "subscribe",
669        SchemaKind::Response,
670        include_str!("../schemas/fs_watch/subscribe.response.json"),
671    ),
672    (
673        "fs_watch",
674        "unsubscribe",
675        SchemaKind::Request,
676        include_str!("../schemas/fs_watch/unsubscribe.request.json"),
677    ),
678    (
679        "fs_watch",
680        "unsubscribe",
681        SchemaKind::Response,
682        include_str!("../schemas/fs_watch/unsubscribe.response.json"),
683    ),
684    // tools/
685    (
686        "tools",
687        "search",
688        SchemaKind::Request,
689        include_str!("../schemas/tools/search.request.json"),
690    ),
691    (
692        "tools",
693        "search",
694        SchemaKind::Response,
695        include_str!("../schemas/tools/search.response.json"),
696    ),
697    (
698        "tools",
699        "read_file",
700        SchemaKind::Request,
701        include_str!("../schemas/tools/read_file.request.json"),
702    ),
703    (
704        "tools",
705        "read_file",
706        SchemaKind::Response,
707        include_str!("../schemas/tools/read_file.response.json"),
708    ),
709    (
710        "tools",
711        "write_file",
712        SchemaKind::Request,
713        include_str!("../schemas/tools/write_file.request.json"),
714    ),
715    (
716        "tools",
717        "write_file",
718        SchemaKind::Response,
719        include_str!("../schemas/tools/write_file.response.json"),
720    ),
721    (
722        "tools",
723        "delete_file",
724        SchemaKind::Request,
725        include_str!("../schemas/tools/delete_file.request.json"),
726    ),
727    (
728        "tools",
729        "delete_file",
730        SchemaKind::Response,
731        include_str!("../schemas/tools/delete_file.response.json"),
732    ),
733    (
734        "tools",
735        "list_directory",
736        SchemaKind::Request,
737        include_str!("../schemas/tools/list_directory.request.json"),
738    ),
739    (
740        "tools",
741        "list_directory",
742        SchemaKind::Response,
743        include_str!("../schemas/tools/list_directory.response.json"),
744    ),
745    (
746        "tools",
747        "get_file_outline",
748        SchemaKind::Request,
749        include_str!("../schemas/tools/get_file_outline.request.json"),
750    ),
751    (
752        "tools",
753        "get_file_outline",
754        SchemaKind::Response,
755        include_str!("../schemas/tools/get_file_outline.response.json"),
756    ),
757    (
758        "tools",
759        "git",
760        SchemaKind::Request,
761        include_str!("../schemas/tools/git.request.json"),
762    ),
763    (
764        "tools",
765        "git",
766        SchemaKind::Response,
767        include_str!("../schemas/tools/git.response.json"),
768    ),
769    (
770        "tools",
771        "run_command",
772        SchemaKind::Request,
773        include_str!("../schemas/tools/run_command.request.json"),
774    ),
775    (
776        "tools",
777        "run_command",
778        SchemaKind::Response,
779        include_str!("../schemas/tools/run_command.response.json"),
780    ),
781    (
782        "tools",
783        "read_command_output",
784        SchemaKind::Request,
785        include_str!("../schemas/tools/read_command_output.request.json"),
786    ),
787    (
788        "tools",
789        "read_command_output",
790        SchemaKind::Response,
791        include_str!("../schemas/tools/read_command_output.response.json"),
792    ),
793    (
794        "tools",
795        "run_test",
796        SchemaKind::Request,
797        include_str!("../schemas/tools/run_test.request.json"),
798    ),
799    (
800        "tools",
801        "run_test",
802        SchemaKind::Response,
803        include_str!("../schemas/tools/run_test.response.json"),
804    ),
805    (
806        "tools",
807        "run_build_command",
808        SchemaKind::Request,
809        include_str!("../schemas/tools/run_build_command.request.json"),
810    ),
811    (
812        "tools",
813        "run_build_command",
814        SchemaKind::Response,
815        include_str!("../schemas/tools/run_build_command.response.json"),
816    ),
817    (
818        "tools",
819        "inspect_test_results",
820        SchemaKind::Request,
821        include_str!("../schemas/tools/inspect_test_results.request.json"),
822    ),
823    (
824        "tools",
825        "inspect_test_results",
826        SchemaKind::Response,
827        include_str!("../schemas/tools/inspect_test_results.response.json"),
828    ),
829    (
830        "tools",
831        "manage_packages",
832        SchemaKind::Request,
833        include_str!("../schemas/tools/manage_packages.request.json"),
834    ),
835    (
836        "tools",
837        "manage_packages",
838        SchemaKind::Response,
839        include_str!("../schemas/tools/manage_packages.response.json"),
840    ),
841    (
842        "tools",
843        "cancel_handle",
844        SchemaKind::Request,
845        include_str!("../schemas/tools/cancel_handle.request.json"),
846    ),
847    (
848        "tools",
849        "cancel_handle",
850        SchemaKind::Response,
851        include_str!("../schemas/tools/cancel_handle.response.json"),
852    ),
853    (
854        "tools",
855        "enable",
856        SchemaKind::Request,
857        include_str!("../schemas/tools/enable.request.json"),
858    ),
859    (
860        "tools",
861        "enable",
862        SchemaKind::Response,
863        include_str!("../schemas/tools/enable.response.json"),
864    ),
865    // secret_store/
866    (
867        "secret_store",
868        "get",
869        SchemaKind::Request,
870        include_str!("../schemas/secret_store/get.request.json"),
871    ),
872    (
873        "secret_store",
874        "get",
875        SchemaKind::Response,
876        include_str!("../schemas/secret_store/get.response.json"),
877    ),
878    (
879        "secret_store",
880        "set",
881        SchemaKind::Request,
882        include_str!("../schemas/secret_store/set.request.json"),
883    ),
884    (
885        "secret_store",
886        "set",
887        SchemaKind::Response,
888        include_str!("../schemas/secret_store/set.response.json"),
889    ),
890    (
891        "secret_store",
892        "delete",
893        SchemaKind::Request,
894        include_str!("../schemas/secret_store/delete.request.json"),
895    ),
896    (
897        "secret_store",
898        "delete",
899        SchemaKind::Response,
900        include_str!("../schemas/secret_store/delete.response.json"),
901    ),
902    (
903        "secret_store",
904        "list",
905        SchemaKind::Request,
906        include_str!("../schemas/secret_store/list.request.json"),
907    ),
908    (
909        "secret_store",
910        "list",
911        SchemaKind::Response,
912        include_str!("../schemas/secret_store/list.response.json"),
913    ),
914];
915
916/// Look up a single schema as raw JSON text.
917pub fn lookup(module: &str, method: &str, kind: SchemaKind) -> Option<&'static str> {
918    SCHEMAS
919        .iter()
920        .find(|(m, mt, k, _)| *m == module && *mt == method && *k == kind)
921        .map(|(_, _, _, body)| *body)
922}