1 /// Auto-generated bindings for a pre-instantiated version of a
2 /// component which implements the world `the-world`.
3 ///
4 /// This structure is created through [`TheWorldPre::new`] which
5 /// takes a [`InstancePre`](wasmtime::component::InstancePre) that
6 /// has been created through a [`Linker`](wasmtime::component::Linker).
7 ///
8 /// For more information see [`TheWorld`] as well.
9 pub struct TheWorldPre<T: 'static> {
10     instance_pre: wasmtime::component::InstancePre<T>,
11     indices: TheWorldIndices,
12 }
13 impl<T: 'static> Clone for TheWorldPre<T> {
14     fn clone(&self) -> Self {
15         Self {
16             instance_pre: self.instance_pre.clone(),
17             indices: self.indices.clone(),
18         }
19     }
20 }
21 impl<_T: 'static> TheWorldPre<_T> {
22     /// Creates a new copy of `TheWorldPre` bindings which can then
23     /// be used to instantiate into a particular store.
24     ///
25     /// This method may fail if the component behind `instance_pre`
26     /// does not have the required exports.
27     pub fn new(
28         instance_pre: wasmtime::component::InstancePre<_T>,
29     ) -> wasmtime::Result<Self> {
30         let indices = TheWorldIndices::new(&instance_pre)?;
31         Ok(Self { instance_pre, indices })
32     }
33     pub fn engine(&self) -> &wasmtime::Engine {
34         self.instance_pre.engine()
35     }
36     pub fn instance_pre(&self) -> &wasmtime::component::InstancePre<_T> {
37         &self.instance_pre
38     }
39     /// Instantiates a new instance of [`TheWorld`] within the
40     /// `store` provided.
41     ///
42     /// This function will use `self` as the pre-instantiated
43     /// instance to perform instantiation. Afterwards the preloaded
44     /// indices in `self` are used to lookup all exports on the
45     /// resulting instance.
46     pub fn instantiate(
47         &self,
48         mut store: impl wasmtime::AsContextMut<Data = _T>,
49     ) -> wasmtime::Result<TheWorld> {
50         let mut store = store.as_context_mut();
51         let instance = self.instance_pre.instantiate(&mut store)?;
52         self.indices.load(&mut store, &instance)
53     }
54 }
55 impl<_T: Send + 'static> TheWorldPre<_T> {
56     /// Same as [`Self::instantiate`], except with `async`.
57     pub async fn instantiate_async(
58         &self,
59         mut store: impl wasmtime::AsContextMut<Data = _T>,
60     ) -> wasmtime::Result<TheWorld> {
61         let mut store = store.as_context_mut();
62         let instance = self.instance_pre.instantiate_async(&mut store).await?;
63         self.indices.load(&mut store, &instance)
64     }
65 }
66 /// Auto-generated bindings for index of the exports of
67 /// `the-world`.
68 ///
69 /// This is an implementation detail of [`TheWorldPre`] and can
70 /// be constructed if needed as well.
71 ///
72 /// For more information see [`TheWorld`] as well.
73 #[derive(Clone)]
74 pub struct TheWorldIndices {
75     interface0: exports::foo::foo::integers::GuestIndices,
76 }
77 /// Auto-generated bindings for an instance a component which
78 /// implements the world `the-world`.
79 ///
80 /// This structure can be created through a number of means
81 /// depending on your requirements and what you have on hand:
82 ///
83 /// * The most convenient way is to use
84 ///   [`TheWorld::instantiate`] which only needs a
85 ///   [`Store`], [`Component`], and [`Linker`].
86 ///
87 /// * Alternatively you can create a [`TheWorldPre`] ahead of
88 ///   time with a [`Component`] to front-load string lookups
89 ///   of exports once instead of per-instantiation. This
90 ///   method then uses [`TheWorldPre::instantiate`] to
91 ///   create a [`TheWorld`].
92 ///
93 /// * If you've instantiated the instance yourself already
94 ///   then you can use [`TheWorld::new`].
95 ///
96 /// These methods are all equivalent to one another and move
97 /// around the tradeoff of what work is performed when.
98 ///
99 /// [`Store`]: wasmtime::Store
100 /// [`Component`]: wasmtime::component::Component
101 /// [`Linker`]: wasmtime::component::Linker
102 pub struct TheWorld {
103     interface0: exports::foo::foo::integers::Guest,
104 }
105 const _: () = {
106     impl TheWorldIndices {
107         /// Creates a new copy of `TheWorldIndices` bindings which can then
108         /// be used to instantiate into a particular store.
109         ///
110         /// This method may fail if the component does not have the
111         /// required exports.
112         pub fn new<_T>(
113             _instance_pre: &wasmtime::component::InstancePre<_T>,
114         ) -> wasmtime::Result<Self> {
115             let _component = _instance_pre.component();
116             let _instance_type = _instance_pre.instance_type();
117             let interface0 = exports::foo::foo::integers::GuestIndices::new(
118                 _instance_pre,
119             )?;
120             Ok(TheWorldIndices { interface0 })
121         }
122         /// Uses the indices stored in `self` to load an instance
123         /// of [`TheWorld`] from the instance provided.
124         ///
125         /// Note that at this time this method will additionally
126         /// perform type-checks of all exports.
127         pub fn load(
128             &self,
129             mut store: impl wasmtime::AsContextMut,
130             instance: &wasmtime::component::Instance,
131         ) -> wasmtime::Result<TheWorld> {
132             let _ = &mut store;
133             let _instance = instance;
134             let interface0 = self.interface0.load(&mut store, &_instance)?;
135             Ok(TheWorld { interface0 })
136         }
137     }
138     impl TheWorld {
139         /// Convenience wrapper around [`TheWorldPre::new`] and
140         /// [`TheWorldPre::instantiate`].
141         pub fn instantiate<_T>(
142             store: impl wasmtime::AsContextMut<Data = _T>,
143             component: &wasmtime::component::Component,
144             linker: &wasmtime::component::Linker<_T>,
145         ) -> wasmtime::Result<TheWorld> {
146             let pre = linker.instantiate_pre(component)?;
147             TheWorldPre::new(pre)?.instantiate(store)
148         }
149         /// Convenience wrapper around [`TheWorldIndices::new`] and
150         /// [`TheWorldIndices::load`].
151         pub fn new(
152             mut store: impl wasmtime::AsContextMut,
153             instance: &wasmtime::component::Instance,
154         ) -> wasmtime::Result<TheWorld> {
155             let indices = TheWorldIndices::new(&instance.instance_pre(&store))?;
156             indices.load(&mut store, instance)
157         }
158         /// Convenience wrapper around [`TheWorldPre::new`] and
159         /// [`TheWorldPre::instantiate_async`].
160         pub async fn instantiate_async<_T>(
161             store: impl wasmtime::AsContextMut<Data = _T>,
162             component: &wasmtime::component::Component,
163             linker: &wasmtime::component::Linker<_T>,
164         ) -> wasmtime::Result<TheWorld>
165         where
166             _T: Send,
167         {
168             let pre = linker.instantiate_pre(component)?;
169             TheWorldPre::new(pre)?.instantiate_async(store).await
170         }
171         pub fn add_to_linker<T, D>(
172             linker: &mut wasmtime::component::Linker<T>,
173             host_getter: fn(&mut T) -> D::Data<'_>,
174         ) -> wasmtime::Result<()>
175         where
176             D: foo::foo::integers::HostWithStore + Send,
177             for<'a> D::Data<'a>: foo::foo::integers::Host + Send,
178             T: 'static + Send,
179         {
180             foo::foo::integers::add_to_linker::<T, D>(linker, host_getter)?;
181             Ok(())
182         }
183         pub fn foo_foo_integers(&self) -> &exports::foo::foo::integers::Guest {
184             &self.interface0
185         }
186     }
187 };
188 pub mod foo {
189     pub mod foo {
190         #[allow(clippy::all)]
191         pub mod integers {
192             #[allow(unused_imports)]
193             use wasmtime::component::__internal::Box;
194             pub trait HostWithStore: wasmtime::component::HasData + Send {
195                 fn a1<T: Send>(
196                     accessor: &wasmtime::component::Accessor<T, Self>,
197                     x: u8,
198                 ) -> impl ::core::future::Future<Output = ()> + Send;
199                 fn a2<T: Send>(
200                     accessor: &wasmtime::component::Accessor<T, Self>,
201                     x: i8,
202                 ) -> impl ::core::future::Future<Output = ()> + Send;
203                 fn a3<T: Send>(
204                     accessor: &wasmtime::component::Accessor<T, Self>,
205                     x: u16,
206                 ) -> impl ::core::future::Future<Output = ()> + Send;
207                 fn a4<T: Send>(
208                     accessor: &wasmtime::component::Accessor<T, Self>,
209                     x: i16,
210                 ) -> impl ::core::future::Future<Output = ()> + Send;
211                 fn a5<T: Send>(
212                     accessor: &wasmtime::component::Accessor<T, Self>,
213                     x: u32,
214                 ) -> impl ::core::future::Future<Output = ()> + Send;
215                 fn a6<T: Send>(
216                     accessor: &wasmtime::component::Accessor<T, Self>,
217                     x: i32,
218                 ) -> impl ::core::future::Future<Output = ()> + Send;
219                 fn a7<T: Send>(
220                     accessor: &wasmtime::component::Accessor<T, Self>,
221                     x: u64,
222                 ) -> impl ::core::future::Future<Output = ()> + Send;
223                 fn a8<T: Send>(
224                     accessor: &wasmtime::component::Accessor<T, Self>,
225                     x: i64,
226                 ) -> impl ::core::future::Future<Output = ()> + Send;
227                 fn a9<T: Send>(
228                     accessor: &wasmtime::component::Accessor<T, Self>,
229                     p1: u8,
230                     p2: i8,
231                     p3: u16,
232                     p4: i16,
233                     p5: u32,
234                     p6: i32,
235                     p7: u64,
236                     p8: i64,
237                 ) -> impl ::core::future::Future<Output = ()> + Send;
238                 fn r1<T: Send>(
239                     accessor: &wasmtime::component::Accessor<T, Self>,
240                 ) -> impl ::core::future::Future<Output = u8> + Send;
241                 fn r2<T: Send>(
242                     accessor: &wasmtime::component::Accessor<T, Self>,
243                 ) -> impl ::core::future::Future<Output = i8> + Send;
244                 fn r3<T: Send>(
245                     accessor: &wasmtime::component::Accessor<T, Self>,
246                 ) -> impl ::core::future::Future<Output = u16> + Send;
247                 fn r4<T: Send>(
248                     accessor: &wasmtime::component::Accessor<T, Self>,
249                 ) -> impl ::core::future::Future<Output = i16> + Send;
250                 fn r5<T: Send>(
251                     accessor: &wasmtime::component::Accessor<T, Self>,
252                 ) -> impl ::core::future::Future<Output = u32> + Send;
253                 fn r6<T: Send>(
254                     accessor: &wasmtime::component::Accessor<T, Self>,
255                 ) -> impl ::core::future::Future<Output = i32> + Send;
256                 fn r7<T: Send>(
257                     accessor: &wasmtime::component::Accessor<T, Self>,
258                 ) -> impl ::core::future::Future<Output = u64> + Send;
259                 fn r8<T: Send>(
260                     accessor: &wasmtime::component::Accessor<T, Self>,
261                 ) -> impl ::core::future::Future<Output = i64> + Send;
262                 fn pair_ret<T: Send>(
263                     accessor: &wasmtime::component::Accessor<T, Self>,
264                 ) -> impl ::core::future::Future<Output = (i64, u8)> + Send;
265             }
266             pub trait Host: Send {}
267             impl<_T: Host + ?Sized + Send> Host for &mut _T {}
268             pub fn add_to_linker<T, D>(
269                 linker: &mut wasmtime::component::Linker<T>,
270                 host_getter: fn(&mut T) -> D::Data<'_>,
271             ) -> wasmtime::Result<()>
272             where
273                 D: HostWithStore,
274                 for<'a> D::Data<'a>: Host,
275                 T: 'static + Send,
276             {
277                 let mut inst = linker.instance("foo:foo/integers")?;
278                 inst.func_wrap_concurrent(
279                     "a1",
280                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (u8,)| {
281                         wasmtime::component::__internal::Box::pin(async move {
282                             let host = &caller.with_getter(host_getter);
283                             let r = <D as HostWithStore>::a1(host, arg0).await;
284                             Ok(r)
285                         })
286                     },
287                 )?;
288                 inst.func_wrap_concurrent(
289                     "a2",
290                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (i8,)| {
291                         wasmtime::component::__internal::Box::pin(async move {
292                             let host = &caller.with_getter(host_getter);
293                             let r = <D as HostWithStore>::a2(host, arg0).await;
294                             Ok(r)
295                         })
296                     },
297                 )?;
298                 inst.func_wrap_concurrent(
299                     "a3",
300                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (u16,)| {
301                         wasmtime::component::__internal::Box::pin(async move {
302                             let host = &caller.with_getter(host_getter);
303                             let r = <D as HostWithStore>::a3(host, arg0).await;
304                             Ok(r)
305                         })
306                     },
307                 )?;
308                 inst.func_wrap_concurrent(
309                     "a4",
310                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (i16,)| {
311                         wasmtime::component::__internal::Box::pin(async move {
312                             let host = &caller.with_getter(host_getter);
313                             let r = <D as HostWithStore>::a4(host, arg0).await;
314                             Ok(r)
315                         })
316                     },
317                 )?;
318                 inst.func_wrap_concurrent(
319                     "a5",
320                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (u32,)| {
321                         wasmtime::component::__internal::Box::pin(async move {
322                             let host = &caller.with_getter(host_getter);
323                             let r = <D as HostWithStore>::a5(host, arg0).await;
324                             Ok(r)
325                         })
326                     },
327                 )?;
328                 inst.func_wrap_concurrent(
329                     "a6",
330                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (i32,)| {
331                         wasmtime::component::__internal::Box::pin(async move {
332                             let host = &caller.with_getter(host_getter);
333                             let r = <D as HostWithStore>::a6(host, arg0).await;
334                             Ok(r)
335                         })
336                     },
337                 )?;
338                 inst.func_wrap_concurrent(
339                     "a7",
340                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (u64,)| {
341                         wasmtime::component::__internal::Box::pin(async move {
342                             let host = &caller.with_getter(host_getter);
343                             let r = <D as HostWithStore>::a7(host, arg0).await;
344                             Ok(r)
345                         })
346                     },
347                 )?;
348                 inst.func_wrap_concurrent(
349                     "a8",
350                     move |caller: &wasmtime::component::Accessor<T>, (arg0,): (i64,)| {
351                         wasmtime::component::__internal::Box::pin(async move {
352                             let host = &caller.with_getter(host_getter);
353                             let r = <D as HostWithStore>::a8(host, arg0).await;
354                             Ok(r)
355                         })
356                     },
357                 )?;
358                 inst.func_wrap_concurrent(
359                     "a9",
360                     move |
361                         caller: &wasmtime::component::Accessor<T>,
362                         (
363                             arg0,
364                             arg1,
365                             arg2,
366                             arg3,
367                             arg4,
368                             arg5,
369                             arg6,
370                             arg7,
371                         ): (u8, i8, u16, i16, u32, i32, u64, i64)|
372                     {
373                         wasmtime::component::__internal::Box::pin(async move {
374                             let host = &caller.with_getter(host_getter);
375                             let r = <D as HostWithStore>::a9(
376                                     host,
377                                     arg0,
378                                     arg1,
379                                     arg2,
380                                     arg3,
381                                     arg4,
382                                     arg5,
383                                     arg6,
384                                     arg7,
385                                 )
386                                 .await;
387                             Ok(r)
388                         })
389                     },
390                 )?;
391                 inst.func_wrap_concurrent(
392                     "r1",
393                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
394                         wasmtime::component::__internal::Box::pin(async move {
395                             let host = &caller.with_getter(host_getter);
396                             let r = <D as HostWithStore>::r1(host).await;
397                             Ok((r,))
398                         })
399                     },
400                 )?;
401                 inst.func_wrap_concurrent(
402                     "r2",
403                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
404                         wasmtime::component::__internal::Box::pin(async move {
405                             let host = &caller.with_getter(host_getter);
406                             let r = <D as HostWithStore>::r2(host).await;
407                             Ok((r,))
408                         })
409                     },
410                 )?;
411                 inst.func_wrap_concurrent(
412                     "r3",
413                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
414                         wasmtime::component::__internal::Box::pin(async move {
415                             let host = &caller.with_getter(host_getter);
416                             let r = <D as HostWithStore>::r3(host).await;
417                             Ok((r,))
418                         })
419                     },
420                 )?;
421                 inst.func_wrap_concurrent(
422                     "r4",
423                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
424                         wasmtime::component::__internal::Box::pin(async move {
425                             let host = &caller.with_getter(host_getter);
426                             let r = <D as HostWithStore>::r4(host).await;
427                             Ok((r,))
428                         })
429                     },
430                 )?;
431                 inst.func_wrap_concurrent(
432                     "r5",
433                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
434                         wasmtime::component::__internal::Box::pin(async move {
435                             let host = &caller.with_getter(host_getter);
436                             let r = <D as HostWithStore>::r5(host).await;
437                             Ok((r,))
438                         })
439                     },
440                 )?;
441                 inst.func_wrap_concurrent(
442                     "r6",
443                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
444                         wasmtime::component::__internal::Box::pin(async move {
445                             let host = &caller.with_getter(host_getter);
446                             let r = <D as HostWithStore>::r6(host).await;
447                             Ok((r,))
448                         })
449                     },
450                 )?;
451                 inst.func_wrap_concurrent(
452                     "r7",
453                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
454                         wasmtime::component::__internal::Box::pin(async move {
455                             let host = &caller.with_getter(host_getter);
456                             let r = <D as HostWithStore>::r7(host).await;
457                             Ok((r,))
458                         })
459                     },
460                 )?;
461                 inst.func_wrap_concurrent(
462                     "r8",
463                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
464                         wasmtime::component::__internal::Box::pin(async move {
465                             let host = &caller.with_getter(host_getter);
466                             let r = <D as HostWithStore>::r8(host).await;
467                             Ok((r,))
468                         })
469                     },
470                 )?;
471                 inst.func_wrap_concurrent(
472                     "pair-ret",
473                     move |caller: &wasmtime::component::Accessor<T>, (): ()| {
474                         wasmtime::component::__internal::Box::pin(async move {
475                             let host = &caller.with_getter(host_getter);
476                             let r = <D as HostWithStore>::pair_ret(host).await;
477                             Ok((r,))
478                         })
479                     },
480                 )?;
481                 Ok(())
482             }
483         }
484     }
485 }
486 pub mod exports {
487     pub mod foo {
488         pub mod foo {
489             #[allow(clippy::all)]
490             pub mod integers {
491                 #[allow(unused_imports)]
492                 use wasmtime::component::__internal::Box;
493                 #[derive(Clone)]
494                 pub struct Guest {
495                     a1: wasmtime::component::Func,
496                     a2: wasmtime::component::Func,
497                     a3: wasmtime::component::Func,
498                     a4: wasmtime::component::Func,
499                     a5: wasmtime::component::Func,
500                     a6: wasmtime::component::Func,
501                     a7: wasmtime::component::Func,
502                     a8: wasmtime::component::Func,
503                     a9: wasmtime::component::Func,
504                     r1: wasmtime::component::Func,
505                     r2: wasmtime::component::Func,
506                     r3: wasmtime::component::Func,
507                     r4: wasmtime::component::Func,
508                     r5: wasmtime::component::Func,
509                     r6: wasmtime::component::Func,
510                     r7: wasmtime::component::Func,
511                     r8: wasmtime::component::Func,
512                     pair_ret: wasmtime::component::Func,
513                 }
514                 #[derive(Clone)]
515                 pub struct GuestIndices {
516                     a1: wasmtime::component::ComponentExportIndex,
517                     a2: wasmtime::component::ComponentExportIndex,
518                     a3: wasmtime::component::ComponentExportIndex,
519                     a4: wasmtime::component::ComponentExportIndex,
520                     a5: wasmtime::component::ComponentExportIndex,
521                     a6: wasmtime::component::ComponentExportIndex,
522                     a7: wasmtime::component::ComponentExportIndex,
523                     a8: wasmtime::component::ComponentExportIndex,
524                     a9: wasmtime::component::ComponentExportIndex,
525                     r1: wasmtime::component::ComponentExportIndex,
526                     r2: wasmtime::component::ComponentExportIndex,
527                     r3: wasmtime::component::ComponentExportIndex,
528                     r4: wasmtime::component::ComponentExportIndex,
529                     r5: wasmtime::component::ComponentExportIndex,
530                     r6: wasmtime::component::ComponentExportIndex,
531                     r7: wasmtime::component::ComponentExportIndex,
532                     r8: wasmtime::component::ComponentExportIndex,
533                     pair_ret: wasmtime::component::ComponentExportIndex,
534                 }
535                 impl GuestIndices {
536                     /// Constructor for [`GuestIndices`] which takes a
537                     /// [`Component`](wasmtime::component::Component) as input and can be executed
538                     /// before instantiation.
539                     ///
540                     /// This constructor can be used to front-load string lookups to find exports
541                     /// within a component.
542                     pub fn new<_T>(
543                         _instance_pre: &wasmtime::component::InstancePre<_T>,
544                     ) -> wasmtime::Result<GuestIndices> {
545                         let instance = _instance_pre
546                             .component()
547                             .get_export_index(None, "foo:foo/integers")
548                             .ok_or_else(|| {
549                                 wasmtime::format_err!(
550                                     "no exported instance named `foo:foo/integers`"
551                                 )
552                             })?;
553                         let mut lookup = move |name| {
554                             _instance_pre
555                                 .component()
556                                 .get_export_index(Some(&instance), name)
557                                 .ok_or_else(|| {
558                                     wasmtime::format_err!(
559                                         "instance export `foo:foo/integers` does \
560                 not have export `{name}`"
561                                     )
562                                 })
563                         };
564                         let _ = &mut lookup;
565                         let a1 = lookup("a1")?;
566                         let a2 = lookup("a2")?;
567                         let a3 = lookup("a3")?;
568                         let a4 = lookup("a4")?;
569                         let a5 = lookup("a5")?;
570                         let a6 = lookup("a6")?;
571                         let a7 = lookup("a7")?;
572                         let a8 = lookup("a8")?;
573                         let a9 = lookup("a9")?;
574                         let r1 = lookup("r1")?;
575                         let r2 = lookup("r2")?;
576                         let r3 = lookup("r3")?;
577                         let r4 = lookup("r4")?;
578                         let r5 = lookup("r5")?;
579                         let r6 = lookup("r6")?;
580                         let r7 = lookup("r7")?;
581                         let r8 = lookup("r8")?;
582                         let pair_ret = lookup("pair-ret")?;
583                         Ok(GuestIndices {
584                             a1,
585                             a2,
586                             a3,
587                             a4,
588                             a5,
589                             a6,
590                             a7,
591                             a8,
592                             a9,
593                             r1,
594                             r2,
595                             r3,
596                             r4,
597                             r5,
598                             r6,
599                             r7,
600                             r8,
601                             pair_ret,
602                         })
603                     }
604                     pub fn load(
605                         &self,
606                         mut store: impl wasmtime::AsContextMut,
607                         instance: &wasmtime::component::Instance,
608                     ) -> wasmtime::Result<Guest> {
609                         let _instance = instance;
610                         let _instance_pre = _instance.instance_pre(&store);
611                         let _instance_type = _instance_pre.instance_type();
612                         let mut store = store.as_context_mut();
613                         let _ = &mut store;
614                         let a1 = *_instance
615                             .get_typed_func::<(u8,), ()>(&mut store, &self.a1)?
616                             .func();
617                         let a2 = *_instance
618                             .get_typed_func::<(i8,), ()>(&mut store, &self.a2)?
619                             .func();
620                         let a3 = *_instance
621                             .get_typed_func::<(u16,), ()>(&mut store, &self.a3)?
622                             .func();
623                         let a4 = *_instance
624                             .get_typed_func::<(i16,), ()>(&mut store, &self.a4)?
625                             .func();
626                         let a5 = *_instance
627                             .get_typed_func::<(u32,), ()>(&mut store, &self.a5)?
628                             .func();
629                         let a6 = *_instance
630                             .get_typed_func::<(i32,), ()>(&mut store, &self.a6)?
631                             .func();
632                         let a7 = *_instance
633                             .get_typed_func::<(u64,), ()>(&mut store, &self.a7)?
634                             .func();
635                         let a8 = *_instance
636                             .get_typed_func::<(i64,), ()>(&mut store, &self.a8)?
637                             .func();
638                         let a9 = *_instance
639                             .get_typed_func::<
640                                 (u8, i8, u16, i16, u32, i32, u64, i64),
641                                 (),
642                             >(&mut store, &self.a9)?
643                             .func();
644                         let r1 = *_instance
645                             .get_typed_func::<(), (u8,)>(&mut store, &self.r1)?
646                             .func();
647                         let r2 = *_instance
648                             .get_typed_func::<(), (i8,)>(&mut store, &self.r2)?
649                             .func();
650                         let r3 = *_instance
651                             .get_typed_func::<(), (u16,)>(&mut store, &self.r3)?
652                             .func();
653                         let r4 = *_instance
654                             .get_typed_func::<(), (i16,)>(&mut store, &self.r4)?
655                             .func();
656                         let r5 = *_instance
657                             .get_typed_func::<(), (u32,)>(&mut store, &self.r5)?
658                             .func();
659                         let r6 = *_instance
660                             .get_typed_func::<(), (i32,)>(&mut store, &self.r6)?
661                             .func();
662                         let r7 = *_instance
663                             .get_typed_func::<(), (u64,)>(&mut store, &self.r7)?
664                             .func();
665                         let r8 = *_instance
666                             .get_typed_func::<(), (i64,)>(&mut store, &self.r8)?
667                             .func();
668                         let pair_ret = *_instance
669                             .get_typed_func::<
670                                 (),
671                                 ((i64, u8),),
672                             >(&mut store, &self.pair_ret)?
673                             .func();
674                         Ok(Guest {
675                             a1,
676                             a2,
677                             a3,
678                             a4,
679                             a5,
680                             a6,
681                             a7,
682                             a8,
683                             a9,
684                             r1,
685                             r2,
686                             r3,
687                             r4,
688                             r5,
689                             r6,
690                             r7,
691                             r8,
692                             pair_ret,
693                         })
694                     }
695                 }
696                 impl Guest {
697                     pub async fn call_a1<_T, _D>(
698                         &self,
699                         accessor: &wasmtime::component::Accessor<_T, _D>,
700                         arg0: u8,
701                     ) -> wasmtime::Result<()>
702                     where
703                         _T: Send,
704                         _D: wasmtime::component::HasData,
705                     {
706                         let callee = unsafe {
707                             wasmtime::component::TypedFunc::<
708                                 (u8,),
709                                 (),
710                             >::new_unchecked(self.a1)
711                         };
712                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
713                         Ok(())
714                     }
715                     pub async fn call_a2<_T, _D>(
716                         &self,
717                         accessor: &wasmtime::component::Accessor<_T, _D>,
718                         arg0: i8,
719                     ) -> wasmtime::Result<()>
720                     where
721                         _T: Send,
722                         _D: wasmtime::component::HasData,
723                     {
724                         let callee = unsafe {
725                             wasmtime::component::TypedFunc::<
726                                 (i8,),
727                                 (),
728                             >::new_unchecked(self.a2)
729                         };
730                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
731                         Ok(())
732                     }
733                     pub async fn call_a3<_T, _D>(
734                         &self,
735                         accessor: &wasmtime::component::Accessor<_T, _D>,
736                         arg0: u16,
737                     ) -> wasmtime::Result<()>
738                     where
739                         _T: Send,
740                         _D: wasmtime::component::HasData,
741                     {
742                         let callee = unsafe {
743                             wasmtime::component::TypedFunc::<
744                                 (u16,),
745                                 (),
746                             >::new_unchecked(self.a3)
747                         };
748                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
749                         Ok(())
750                     }
751                     pub async fn call_a4<_T, _D>(
752                         &self,
753                         accessor: &wasmtime::component::Accessor<_T, _D>,
754                         arg0: i16,
755                     ) -> wasmtime::Result<()>
756                     where
757                         _T: Send,
758                         _D: wasmtime::component::HasData,
759                     {
760                         let callee = unsafe {
761                             wasmtime::component::TypedFunc::<
762                                 (i16,),
763                                 (),
764                             >::new_unchecked(self.a4)
765                         };
766                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
767                         Ok(())
768                     }
769                     pub async fn call_a5<_T, _D>(
770                         &self,
771                         accessor: &wasmtime::component::Accessor<_T, _D>,
772                         arg0: u32,
773                     ) -> wasmtime::Result<()>
774                     where
775                         _T: Send,
776                         _D: wasmtime::component::HasData,
777                     {
778                         let callee = unsafe {
779                             wasmtime::component::TypedFunc::<
780                                 (u32,),
781                                 (),
782                             >::new_unchecked(self.a5)
783                         };
784                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
785                         Ok(())
786                     }
787                     pub async fn call_a6<_T, _D>(
788                         &self,
789                         accessor: &wasmtime::component::Accessor<_T, _D>,
790                         arg0: i32,
791                     ) -> wasmtime::Result<()>
792                     where
793                         _T: Send,
794                         _D: wasmtime::component::HasData,
795                     {
796                         let callee = unsafe {
797                             wasmtime::component::TypedFunc::<
798                                 (i32,),
799                                 (),
800                             >::new_unchecked(self.a6)
801                         };
802                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
803                         Ok(())
804                     }
805                     pub async fn call_a7<_T, _D>(
806                         &self,
807                         accessor: &wasmtime::component::Accessor<_T, _D>,
808                         arg0: u64,
809                     ) -> wasmtime::Result<()>
810                     where
811                         _T: Send,
812                         _D: wasmtime::component::HasData,
813                     {
814                         let callee = unsafe {
815                             wasmtime::component::TypedFunc::<
816                                 (u64,),
817                                 (),
818                             >::new_unchecked(self.a7)
819                         };
820                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
821                         Ok(())
822                     }
823                     pub async fn call_a8<_T, _D>(
824                         &self,
825                         accessor: &wasmtime::component::Accessor<_T, _D>,
826                         arg0: i64,
827                     ) -> wasmtime::Result<()>
828                     where
829                         _T: Send,
830                         _D: wasmtime::component::HasData,
831                     {
832                         let callee = unsafe {
833                             wasmtime::component::TypedFunc::<
834                                 (i64,),
835                                 (),
836                             >::new_unchecked(self.a8)
837                         };
838                         let ((), _) = callee.call_concurrent(accessor, (arg0,)).await?;
839                         Ok(())
840                     }
841                     pub async fn call_a9<_T, _D>(
842                         &self,
843                         accessor: &wasmtime::component::Accessor<_T, _D>,
844                         arg0: u8,
845                         arg1: i8,
846                         arg2: u16,
847                         arg3: i16,
848                         arg4: u32,
849                         arg5: i32,
850                         arg6: u64,
851                         arg7: i64,
852                     ) -> wasmtime::Result<()>
853                     where
854                         _T: Send,
855                         _D: wasmtime::component::HasData,
856                     {
857                         let callee = unsafe {
858                             wasmtime::component::TypedFunc::<
859                                 (u8, i8, u16, i16, u32, i32, u64, i64),
860                                 (),
861                             >::new_unchecked(self.a9)
862                         };
863                         let ((), _) = callee
864                             .call_concurrent(
865                                 accessor,
866                                 (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7),
867                             )
868                             .await?;
869                         Ok(())
870                     }
871                     pub async fn call_r1<_T, _D>(
872                         &self,
873                         accessor: &wasmtime::component::Accessor<_T, _D>,
874                     ) -> wasmtime::Result<u8>
875                     where
876                         _T: Send,
877                         _D: wasmtime::component::HasData,
878                     {
879                         let callee = unsafe {
880                             wasmtime::component::TypedFunc::<
881                                 (),
882                                 (u8,),
883                             >::new_unchecked(self.r1)
884                         };
885                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
886                         Ok(ret0)
887                     }
888                     pub async fn call_r2<_T, _D>(
889                         &self,
890                         accessor: &wasmtime::component::Accessor<_T, _D>,
891                     ) -> wasmtime::Result<i8>
892                     where
893                         _T: Send,
894                         _D: wasmtime::component::HasData,
895                     {
896                         let callee = unsafe {
897                             wasmtime::component::TypedFunc::<
898                                 (),
899                                 (i8,),
900                             >::new_unchecked(self.r2)
901                         };
902                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
903                         Ok(ret0)
904                     }
905                     pub async fn call_r3<_T, _D>(
906                         &self,
907                         accessor: &wasmtime::component::Accessor<_T, _D>,
908                     ) -> wasmtime::Result<u16>
909                     where
910                         _T: Send,
911                         _D: wasmtime::component::HasData,
912                     {
913                         let callee = unsafe {
914                             wasmtime::component::TypedFunc::<
915                                 (),
916                                 (u16,),
917                             >::new_unchecked(self.r3)
918                         };
919                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
920                         Ok(ret0)
921                     }
922                     pub async fn call_r4<_T, _D>(
923                         &self,
924                         accessor: &wasmtime::component::Accessor<_T, _D>,
925                     ) -> wasmtime::Result<i16>
926                     where
927                         _T: Send,
928                         _D: wasmtime::component::HasData,
929                     {
930                         let callee = unsafe {
931                             wasmtime::component::TypedFunc::<
932                                 (),
933                                 (i16,),
934                             >::new_unchecked(self.r4)
935                         };
936                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
937                         Ok(ret0)
938                     }
939                     pub async fn call_r5<_T, _D>(
940                         &self,
941                         accessor: &wasmtime::component::Accessor<_T, _D>,
942                     ) -> wasmtime::Result<u32>
943                     where
944                         _T: Send,
945                         _D: wasmtime::component::HasData,
946                     {
947                         let callee = unsafe {
948                             wasmtime::component::TypedFunc::<
949                                 (),
950                                 (u32,),
951                             >::new_unchecked(self.r5)
952                         };
953                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
954                         Ok(ret0)
955                     }
956                     pub async fn call_r6<_T, _D>(
957                         &self,
958                         accessor: &wasmtime::component::Accessor<_T, _D>,
959                     ) -> wasmtime::Result<i32>
960                     where
961                         _T: Send,
962                         _D: wasmtime::component::HasData,
963                     {
964                         let callee = unsafe {
965                             wasmtime::component::TypedFunc::<
966                                 (),
967                                 (i32,),
968                             >::new_unchecked(self.r6)
969                         };
970                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
971                         Ok(ret0)
972                     }
973                     pub async fn call_r7<_T, _D>(
974                         &self,
975                         accessor: &wasmtime::component::Accessor<_T, _D>,
976                     ) -> wasmtime::Result<u64>
977                     where
978                         _T: Send,
979                         _D: wasmtime::component::HasData,
980                     {
981                         let callee = unsafe {
982                             wasmtime::component::TypedFunc::<
983                                 (),
984                                 (u64,),
985                             >::new_unchecked(self.r7)
986                         };
987                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
988                         Ok(ret0)
989                     }
990                     pub async fn call_r8<_T, _D>(
991                         &self,
992                         accessor: &wasmtime::component::Accessor<_T, _D>,
993                     ) -> wasmtime::Result<i64>
994                     where
995                         _T: Send,
996                         _D: wasmtime::component::HasData,
997                     {
998                         let callee = unsafe {
999                             wasmtime::component::TypedFunc::<
1000                                 (),
1001                                 (i64,),
1002                             >::new_unchecked(self.r8)
1003                         };
1004                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
1005                         Ok(ret0)
1006                     }
1007                     pub async fn call_pair_ret<_T, _D>(
1008                         &self,
1009                         accessor: &wasmtime::component::Accessor<_T, _D>,
1010                     ) -> wasmtime::Result<(i64, u8)>
1011                     where
1012                         _T: Send,
1013                         _D: wasmtime::component::HasData,
1014                     {
1015                         let callee = unsafe {
1016                             wasmtime::component::TypedFunc::<
1017                                 (),
1018                                 ((i64, u8),),
1019                             >::new_unchecked(self.pair_ret)
1020                         };
1021                         let ((ret0,), _) = callee.call_concurrent(accessor, ()).await?;
1022                         Ok(ret0)
1023                     }
1024                 }
1025             }
1026         }
1027     }
1028 }
1029