1use windows::{
2 core::{implement, IUnknown, Interface, Ref, BOOL, HRESULT, PCWSTR},
3 Win32::System::Com::IStream,
4};
5
6use crate::{pwstr::string_from_pcwstr, Microsoft::Web::WebView2::Win32::*};
7
8pub trait ClosureArg {
9 type Output: Sized;
10}
11
12pub trait InvokeArg<'a> {
13 type Input: 'a;
14
15 fn convert(input: Self::Input) -> <Self as ClosureArg>::Output
16 where
17 Self: ClosureArg;
18}
19
20impl ClosureArg for HRESULT {
21 type Output = windows::core::Result<()>;
22}
23
24impl InvokeArg<'_> for HRESULT {
25 type Input = Self;
26
27 fn convert(input: HRESULT) -> windows::core::Result<()> {
28 input.ok()
29 }
30}
31
32impl ClosureArg for BOOL {
33 type Output = bool;
34}
35
36impl InvokeArg<'_> for BOOL {
37 type Input = Self;
38
39 fn convert(input: BOOL) -> bool {
40 input.as_bool()
41 }
42}
43
44impl ClosureArg for PCWSTR {
45 type Output = String;
46}
47
48impl<'a> InvokeArg<'a> for PCWSTR {
49 type Input = &'a Self;
50
51 fn convert(input: &PCWSTR) -> String {
52 string_from_pcwstr(input)
53 }
54}
55
56impl<I: Interface> ClosureArg for Option<I> {
57 type Output = Self;
58}
59
60impl<'a, I: 'a + Interface + Clone> InvokeArg<'a> for Option<I> {
61 type Input = Ref<'a, I>;
62
63 fn convert(input: Ref<'a, I>) -> <Self as ClosureArg>::Output {
64 input.cloned()
65 }
66}
67
68pub type CompletedClosure<Arg1, Arg2> = Box<
70 dyn FnOnce(
71 <Arg1 as ClosureArg>::Output,
72 <Arg2 as ClosureArg>::Output,
73 ) -> ::windows::core::Result<()>,
74>;
75
76pub type EventClosure<Arg1, Arg2> = Box<
78 dyn FnMut(
79 <Arg1 as ClosureArg>::Output,
80 <Arg2 as ClosureArg>::Output,
81 ) -> windows::core::Result<()>,
82>;
83
84#[event_callback]
85pub struct IsDefaultDownloadDialogOpenChangedEventHandler(
86 ICoreWebView2IsDefaultDownloadDialogOpenChangedEventHandler,
87 Option<ICoreWebView2>,
88 Option<IUnknown>,
89);
90
91#[event_callback]
92pub struct IsDocumentPlayingAudioChangedEventHandler(
93 ICoreWebView2IsDocumentPlayingAudioChangedEventHandler,
94 Option<ICoreWebView2>,
95 Option<IUnknown>,
96);
97
98#[event_callback]
99pub struct IsMutedChangedEventHandler(
100 ICoreWebView2IsMutedChangedEventHandler,
101 Option<ICoreWebView2>,
102 Option<IUnknown>,
103);
104
105#[completed_callback]
106pub struct CreateCoreWebView2EnvironmentCompletedHandler(
107 ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler,
108 HRESULT,
109 Option<ICoreWebView2Environment>,
110);
111
112#[completed_callback]
113pub struct CreateCoreWebView2ControllerCompletedHandler(
114 ICoreWebView2CreateCoreWebView2ControllerCompletedHandler,
115 HRESULT,
116 Option<ICoreWebView2Controller>,
117);
118
119#[event_callback]
120pub struct NewBrowserVersionAvailableEventHandler(
121 ICoreWebView2NewBrowserVersionAvailableEventHandler,
122 Option<ICoreWebView2Environment>,
123 Option<IUnknown>,
124);
125
126#[completed_callback]
127pub struct CreateCoreWebView2CompositionControllerCompletedHandler(
128 ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler,
129 HRESULT,
130 Option<ICoreWebView2CompositionController>,
131);
132
133#[event_callback]
134pub struct CursorChangedEventHandler(
135 ICoreWebView2CursorChangedEventHandler,
136 Option<ICoreWebView2CompositionController>,
137 Option<IUnknown>,
138);
139
140#[event_callback]
141pub struct ZoomFactorChangedEventHandler(
142 ICoreWebView2ZoomFactorChangedEventHandler,
143 Option<ICoreWebView2Controller>,
144 Option<IUnknown>,
145);
146
147#[event_callback]
148pub struct MoveFocusRequestedEventHandler(
149 ICoreWebView2MoveFocusRequestedEventHandler,
150 Option<ICoreWebView2Controller>,
151 Option<ICoreWebView2MoveFocusRequestedEventArgs>,
152);
153
154#[event_callback]
155pub struct FocusChangedEventHandler(
156 ICoreWebView2FocusChangedEventHandler,
157 Option<ICoreWebView2Controller>,
158 Option<IUnknown>,
159);
160
161#[event_callback]
162pub struct AcceleratorKeyPressedEventHandler(
163 ICoreWebView2AcceleratorKeyPressedEventHandler,
164 Option<ICoreWebView2Controller>,
165 Option<ICoreWebView2AcceleratorKeyPressedEventArgs>,
166);
167
168#[event_callback]
169pub struct ProcessInfosChangedEventHandler(
170 ICoreWebView2ProcessInfosChangedEventHandler,
171 Option<ICoreWebView2Environment>,
172 Option<IUnknown>,
173);
174
175#[event_callback]
176pub struct RasterizationScaleChangedEventHandler(
177 ICoreWebView2RasterizationScaleChangedEventHandler,
178 Option<ICoreWebView2Controller>,
179 Option<IUnknown>,
180);
181
182#[event_callback]
183pub struct NavigationStartingEventHandler(
184 ICoreWebView2NavigationStartingEventHandler,
185 Option<ICoreWebView2>,
186 Option<ICoreWebView2NavigationStartingEventArgs>,
187);
188
189#[event_callback]
190pub struct ContentLoadingEventHandler(
191 ICoreWebView2ContentLoadingEventHandler,
192 Option<ICoreWebView2>,
193 Option<ICoreWebView2ContentLoadingEventArgs>,
194);
195
196#[event_callback]
197pub struct SourceChangedEventHandler(
198 ICoreWebView2SourceChangedEventHandler,
199 Option<ICoreWebView2>,
200 Option<ICoreWebView2SourceChangedEventArgs>,
201);
202
203#[event_callback]
204pub struct DOMContentLoadedEventHandler(
205 ICoreWebView2DOMContentLoadedEventHandler,
206 Option<ICoreWebView2>,
207 Option<ICoreWebView2DOMContentLoadedEventArgs>,
208);
209
210#[event_callback]
211pub struct HistoryChangedEventHandler(
212 ICoreWebView2HistoryChangedEventHandler,
213 Option<ICoreWebView2>,
214 Option<IUnknown>,
215);
216
217#[event_callback]
218pub struct NavigationCompletedEventHandler(
219 ICoreWebView2NavigationCompletedEventHandler,
220 Option<ICoreWebView2>,
221 Option<ICoreWebView2NavigationCompletedEventArgs>,
222);
223
224#[event_callback]
225pub struct ScriptDialogOpeningEventHandler(
226 ICoreWebView2ScriptDialogOpeningEventHandler,
227 Option<ICoreWebView2>,
228 Option<ICoreWebView2ScriptDialogOpeningEventArgs>,
229);
230
231#[event_callback]
232pub struct PermissionRequestedEventHandler(
233 ICoreWebView2PermissionRequestedEventHandler,
234 Option<ICoreWebView2>,
235 Option<ICoreWebView2PermissionRequestedEventArgs>,
236);
237
238#[completed_callback]
239pub struct GetNonDefaultPermissionSettingsCompletedHandler(
240 ICoreWebView2GetNonDefaultPermissionSettingsCompletedHandler,
241 HRESULT,
242 Option<ICoreWebView2PermissionSettingCollectionView>,
243);
244
245#[completed_callback]
246pub struct SetPermissionStateCompletedHandler(
247 ICoreWebView2SetPermissionStateCompletedHandler,
248 HRESULT,
249);
250
251#[event_callback]
252pub struct ProcessFailedEventHandler(
253 ICoreWebView2ProcessFailedEventHandler,
254 Option<ICoreWebView2>,
255 Option<ICoreWebView2ProcessFailedEventArgs>,
256);
257
258impl ClosureArg for COREWEBVIEW2_PRINT_STATUS {
259 type Output = Self;
260}
261
262impl InvokeArg<'_> for COREWEBVIEW2_PRINT_STATUS {
263 type Input = Self;
264
265 fn convert(input: Self) -> Self {
266 input
267 }
268}
269
270#[completed_callback]
271pub struct PrintCompletedHandler(
272 ICoreWebView2PrintCompletedHandler,
273 HRESULT,
274 COREWEBVIEW2_PRINT_STATUS,
275);
276
277#[completed_callback]
278pub struct PrintToPdfCompletedHandler(ICoreWebView2PrintToPdfCompletedHandler, HRESULT, BOOL);
279
280#[completed_callback]
281pub struct PrintToPdfStreamCompletedHandler(
282 ICoreWebView2PrintToPdfStreamCompletedHandler,
283 HRESULT,
284 Option<IStream>,
285);
286
287#[completed_callback]
288pub struct AddScriptToExecuteOnDocumentCreatedCompletedHandler(
289 ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler,
290 HRESULT,
291 PCWSTR,
292);
293
294#[completed_callback]
295pub struct ExecuteScriptCompletedHandler(
296 ICoreWebView2ExecuteScriptCompletedHandler,
297 HRESULT,
298 PCWSTR,
299);
300
301#[completed_callback]
302pub struct CapturePreviewCompletedHandler(ICoreWebView2CapturePreviewCompletedHandler, HRESULT);
303
304#[event_callback]
305pub struct WebMessageReceivedEventHandler(
306 ICoreWebView2WebMessageReceivedEventHandler,
307 Option<ICoreWebView2>,
308 Option<ICoreWebView2WebMessageReceivedEventArgs>,
309);
310
311#[completed_callback]
312pub struct CallDevToolsProtocolMethodCompletedHandler(
313 ICoreWebView2CallDevToolsProtocolMethodCompletedHandler,
314 HRESULT,
315 PCWSTR,
316);
317
318#[event_callback]
319pub struct NewWindowRequestedEventHandler(
320 ICoreWebView2NewWindowRequestedEventHandler,
321 Option<ICoreWebView2>,
322 Option<ICoreWebView2NewWindowRequestedEventArgs>,
323);
324
325#[event_callback]
326pub struct DocumentTitleChangedEventHandler(
327 ICoreWebView2DocumentTitleChangedEventHandler,
328 Option<ICoreWebView2>,
329 Option<IUnknown>,
330);
331
332#[event_callback]
333pub struct ContainsFullScreenElementChangedEventHandler(
334 ICoreWebView2ContainsFullScreenElementChangedEventHandler,
335 Option<ICoreWebView2>,
336 Option<IUnknown>,
337);
338
339#[event_callback]
340pub struct WebResourceRequestedEventHandler(
341 ICoreWebView2WebResourceRequestedEventHandler,
342 Option<ICoreWebView2>,
343 Option<ICoreWebView2WebResourceRequestedEventArgs>,
344);
345
346#[event_callback]
347pub struct WebResourceResponseReceivedEventHandler(
348 ICoreWebView2WebResourceResponseReceivedEventHandler,
349 Option<ICoreWebView2>,
350 Option<ICoreWebView2WebResourceResponseReceivedEventArgs>,
351);
352
353#[completed_callback]
354pub struct WebResourceResponseViewGetContentCompletedHandler(
355 ICoreWebView2WebResourceResponseViewGetContentCompletedHandler,
356 HRESULT,
357 Option<IStream>,
358);
359
360#[event_callback]
361pub struct WindowCloseRequestedEventHandler(
362 ICoreWebView2WindowCloseRequestedEventHandler,
363 Option<ICoreWebView2>,
364 Option<IUnknown>,
365);
366
367#[event_callback]
368pub struct DownloadStartingEventHandler(
369 ICoreWebView2DownloadStartingEventHandler,
370 Option<ICoreWebView2>,
371 Option<ICoreWebView2DownloadStartingEventArgs>,
372);
373
374#[event_callback]
375pub struct BytesReceivedChangedEventHandler(
376 ICoreWebView2BytesReceivedChangedEventHandler,
377 Option<ICoreWebView2DownloadOperation>,
378 Option<IUnknown>,
379);
380
381#[event_callback]
382pub struct BrowserProcessExitedEventHandler(
383 ICoreWebView2BrowserProcessExitedEventHandler,
384 Option<ICoreWebView2Environment>,
385 Option<ICoreWebView2BrowserProcessExitedEventArgs>,
386);
387
388#[event_callback]
389pub struct EstimatedEndTimeChangedEventHandler(
390 ICoreWebView2EstimatedEndTimeChangedEventHandler,
391 Option<ICoreWebView2DownloadOperation>,
392 Option<IUnknown>,
393);
394
395#[event_callback]
396pub struct StateChangedEventHandler(
397 ICoreWebView2StateChangedEventHandler,
398 Option<ICoreWebView2DownloadOperation>,
399 Option<IUnknown>,
400);
401
402#[event_callback]
403pub struct DevToolsProtocolEventReceivedEventHandler(
404 ICoreWebView2DevToolsProtocolEventReceivedEventHandler,
405 Option<ICoreWebView2>,
406 Option<ICoreWebView2DevToolsProtocolEventReceivedEventArgs>,
407);
408
409#[event_callback]
410pub struct FrameContentLoadingEventHandler(
411 ICoreWebView2FrameContentLoadingEventHandler,
412 Option<ICoreWebView2Frame>,
413 Option<ICoreWebView2ContentLoadingEventArgs>,
414);
415
416#[event_callback]
417pub struct FrameCreatedEventHandler(
418 ICoreWebView2FrameCreatedEventHandler,
419 Option<ICoreWebView2>,
420 Option<ICoreWebView2FrameCreatedEventArgs>,
421);
422
423#[event_callback]
424pub struct FrameDOMContentLoadedEventHandler(
425 ICoreWebView2FrameDOMContentLoadedEventHandler,
426 Option<ICoreWebView2Frame>,
427 Option<ICoreWebView2DOMContentLoadedEventArgs>,
428);
429
430#[event_callback]
431pub struct FrameDestroyedEventHandler(
432 ICoreWebView2FrameDestroyedEventHandler,
433 Option<ICoreWebView2Frame>,
434 Option<IUnknown>,
435);
436
437#[event_callback]
438pub struct FrameNameChangedEventHandler(
439 ICoreWebView2FrameNameChangedEventHandler,
440 Option<ICoreWebView2Frame>,
441 Option<IUnknown>,
442);
443
444#[event_callback]
445pub struct ClientCertificateRequestedEventHandler(
446 ICoreWebView2ClientCertificateRequestedEventHandler,
447 Option<ICoreWebView2>,
448 Option<ICoreWebView2ClientCertificateRequestedEventArgs>,
449);
450
451#[completed_callback]
452pub struct FrameNavigationCompletedEventHandler(
453 ICoreWebView2FrameNavigationCompletedEventHandler,
454 Option<ICoreWebView2Frame>,
455 Option<ICoreWebView2NavigationCompletedEventArgs>,
456);
457
458#[event_callback]
459pub struct FrameNavigationStartingEventHandler(
460 ICoreWebView2FrameNavigationStartingEventHandler,
461 Option<ICoreWebView2Frame>,
462 Option<ICoreWebView2NavigationStartingEventArgs>,
463);
464
465#[event_callback]
466pub struct FrameWebMessageReceivedEventHandler(
467 ICoreWebView2FrameWebMessageReceivedEventHandler,
468 Option<ICoreWebView2Frame>,
469 Option<ICoreWebView2WebMessageReceivedEventArgs>,
470);
471
472#[completed_callback]
473pub struct GetCookiesCompletedHandler(
474 ICoreWebView2GetCookiesCompletedHandler,
475 HRESULT,
476 Option<ICoreWebView2CookieList>,
477);
478
479#[completed_callback]
480pub struct TrySuspendCompletedHandler(ICoreWebView2TrySuspendCompletedHandler, HRESULT, BOOL);
481
482#[event_callback]
483pub struct BasicAuthenticationRequestedEventHandler(
484 ICoreWebView2BasicAuthenticationRequestedEventHandler,
485 Option<ICoreWebView2>,
486 Option<ICoreWebView2BasicAuthenticationRequestedEventArgs>,
487);
488
489#[event_callback]
490pub struct ContextMenuRequestedEventHandler(
491 ICoreWebView2ContextMenuRequestedEventHandler,
492 Option<ICoreWebView2>,
493 Option<ICoreWebView2ContextMenuRequestedEventArgs>,
494);
495
496#[event_callback]
497pub struct CustomItemSelectedEventHandler(
498 ICoreWebView2CustomItemSelectedEventHandler,
499 Option<ICoreWebView2ContextMenuItem>,
500 Option<IUnknown>,
501);
502
503#[event_callback]
504pub struct FramePermissionRequestedEventHandler(
505 ICoreWebView2FramePermissionRequestedEventHandler,
506 Option<ICoreWebView2Frame>,
507 Option<ICoreWebView2PermissionRequestedEventArgs2>,
508);
509
510#[event_callback]
511pub struct StatusBarTextChangedEventHandler(
512 ICoreWebView2StatusBarTextChangedEventHandler,
513 Option<ICoreWebView2>,
514 Option<IUnknown>,
515);
516
517#[completed_callback]
518pub struct ClearBrowsingDataCompletedHandler(
519 ICoreWebView2ClearBrowsingDataCompletedHandler,
520 HRESULT,
521);
522
523#[completed_callback]
524pub struct ClearServerCertificateErrorActionsCompletedHandler(
525 ICoreWebView2ClearServerCertificateErrorActionsCompletedHandler,
526 HRESULT,
527);
528
529#[event_callback]
530pub struct ServerCertificateErrorDetectedEventHandler(
531 ICoreWebView2ServerCertificateErrorDetectedEventHandler,
532 Option<ICoreWebView2>,
533 Option<ICoreWebView2ServerCertificateErrorDetectedEventArgs>,
534);
535
536#[event_callback]
537pub struct FaviconChangedEventHandler(
538 ICoreWebView2FaviconChangedEventHandler,
539 Option<ICoreWebView2>,
540 Option<IUnknown>,
541);
542
543#[completed_callback]
544pub struct GetFaviconCompletedHandler(
545 ICoreWebView2GetFaviconCompletedHandler,
546 HRESULT,
547 Option<IStream>,
548);
549
550#[event_callback]
551pub struct LaunchingExternalUriSchemeEventHandler(
552 ICoreWebView2LaunchingExternalUriSchemeEventHandler,
553 Option<ICoreWebView2>,
554 Option<ICoreWebView2LaunchingExternalUriSchemeEventArgs>,
555);
556
557#[completed_callback]
558pub struct BrowserExtensionEnableCompletedHandler(
559 ICoreWebView2BrowserExtensionEnableCompletedHandler,
560 HRESULT,
561);
562
563#[completed_callback]
564pub struct BrowserExtensionRemoveCompletedHandler(
565 ICoreWebView2BrowserExtensionRemoveCompletedHandler,
566 HRESULT,
567);
568
569#[completed_callback]
570pub struct ExecuteScriptWithResultCompletedHandler(
571 ICoreWebView2ExecuteScriptWithResultCompletedHandler,
572 HRESULT,
573 Option<ICoreWebView2ExecuteScriptResult>,
574);
575
576#[completed_callback]
577pub struct GetProcessExtendedInfosCompletedHandler(
578 ICoreWebView2GetProcessExtendedInfosCompletedHandler,
579 HRESULT,
580 Option<ICoreWebView2ProcessExtendedInfoCollection>,
581);
582
583#[completed_callback]
584pub struct ProfileAddBrowserExtensionCompletedHandler(
585 ICoreWebView2ProfileAddBrowserExtensionCompletedHandler,
586 HRESULT,
587 Option<ICoreWebView2BrowserExtension>,
588);
589
590#[event_callback]
591pub struct ProfileDeletedEventHandler(
592 ICoreWebView2ProfileDeletedEventHandler,
593 Option<ICoreWebView2Profile>,
594 Option<IUnknown>,
595);
596
597#[completed_callback]
598pub struct ProfileGetBrowserExtensionsCompletedHandler(
599 ICoreWebView2ProfileGetBrowserExtensionsCompletedHandler,
600 HRESULT,
601 Option<ICoreWebView2BrowserExtensionList>,
602);
603
604#[event_callback]
605pub struct NonClientRegionChangedEventHandler(
606 ICoreWebView2NonClientRegionChangedEventHandler,
607 Option<ICoreWebView2CompositionController>,
608 Option<ICoreWebView2NonClientRegionChangedEventArgs>,
609);
610
611#[event_callback]
612pub struct FrameScreenCaptureStartingEventHandler(
613 ICoreWebView2FrameScreenCaptureStartingEventHandler,
614 Option<ICoreWebView2Frame>,
615 Option<ICoreWebView2ScreenCaptureStartingEventArgs>,
616);
617
618#[event_callback]
619pub struct NotificationCloseRequestedEventHandler(
620 ICoreWebView2NotificationCloseRequestedEventHandler,
621 Option<ICoreWebView2Notification>,
622 Option<IUnknown>,
623);
624
625#[event_callback]
626pub struct NotificationReceivedEventHandler(
627 ICoreWebView2NotificationReceivedEventHandler,
628 Option<ICoreWebView2>,
629 Option<ICoreWebView2NotificationReceivedEventArgs>,
630);
631
632#[event_callback]
633pub struct SaveAsUIShowingEventHandler(
634 ICoreWebView2SaveAsUIShowingEventHandler,
635 Option<ICoreWebView2>,
636 Option<ICoreWebView2SaveAsUIShowingEventArgs>,
637);
638
639#[event_callback]
640pub struct SaveFileSecurityCheckStartingEventHandler(
641 ICoreWebView2SaveFileSecurityCheckStartingEventHandler,
642 Option<ICoreWebView2>,
643 Option<ICoreWebView2SaveFileSecurityCheckStartingEventArgs>,
644);
645
646#[event_callback]
647pub struct ScreenCaptureStartingEventHandler(
648 ICoreWebView2ScreenCaptureStartingEventHandler,
649 Option<ICoreWebView2>,
650 Option<ICoreWebView2ScreenCaptureStartingEventArgs>,
651);
652
653#[event_callback]
654pub struct FrameChildFrameCreatedEventHandler(
655 ICoreWebView2FrameChildFrameCreatedEventHandler,
656 Option<ICoreWebView2Frame>,
657 Option<ICoreWebView2FrameCreatedEventArgs>,
658);
659
660#[event_callback]
661pub struct FindActiveMatchIndexChangedEventHandler(
662 ICoreWebView2FindActiveMatchIndexChangedEventHandler,
663 Option<ICoreWebView2Find>,
664 Option<IUnknown>,
665);
666
667#[event_callback]
668pub struct FindMatchCountChangedEventHandler(
669 ICoreWebView2FindMatchCountChangedEventHandler,
670 Option<ICoreWebView2Find>,
671 Option<IUnknown>,
672);
673
674#[completed_callback]
675pub struct FindStartCompletedHandler(ICoreWebView2FindStartCompletedHandler, HRESULT);
676
677impl ClosureArg for COREWEBVIEW2_SAVE_AS_UI_RESULT {
678 type Output = Self;
679}
680
681impl InvokeArg<'_> for COREWEBVIEW2_SAVE_AS_UI_RESULT {
682 type Input = Self;
683
684 fn convert(input: Self) -> Self {
685 input
686 }
687}
688
689#[completed_callback]
690pub struct ShowSaveAsUICompletedHandler(
691 ICoreWebView2ShowSaveAsUICompletedHandler,
692 HRESULT,
693 COREWEBVIEW2_SAVE_AS_UI_RESULT,
694);
695
696#[event_callback]
697pub struct DragStartingEventHandler(
698 ICoreWebView2DragStartingEventHandler,
699 Option<ICoreWebView2CompositionController>,
700 Option<ICoreWebView2DragStartingEventArgs>,
701);
702
703#[cfg(test)]
704mod test {
705 use std::collections::BTreeSet;
706
707 use regex::Regex;
708
709 use webview2_com_sys::declared_interfaces;
710
711 #[test]
712 fn all_implemented() {
713 let contents = include_str!("callback.rs");
714 let pattern = Regex::new(r#"(ICoreWebView2[A-Za-z0-9]+Handler)"#).expect("valid regex");
715 let implemented: BTreeSet<&str> = contents
716 .lines()
717 .filter_map(|line| pattern.captures(line))
718 .filter_map(|captures| captures.get(1))
719 .map(|match_1| match_1.as_str())
720 .collect();
721 let all_declared_callbacks = declared_interfaces::all_declared_callbacks();
722 let missing: Vec<_> = all_declared_callbacks
723 .iter()
724 .filter_map(|name| {
725 if implemented.contains(name) {
726 None
727 } else {
728 Some(name.to_string())
729 }
730 })
731 .collect();
732 let extra: Vec<_> = implemented
733 .iter()
734 .filter_map(|name| {
735 if all_declared_callbacks.contains(name) {
736 None
737 } else {
738 Some(name.to_string())
739 }
740 })
741 .collect();
742 assert!(
743 missing.is_empty() && extra.is_empty(),
744 "missing: {missing:?}\nextra: {extra:?}"
745 );
746 }
747}