Skip to content

Commit a10f1c8

Browse files
committed
factors: trait InstancePreparer -> FactorInstancePreparer
Signed-off-by: Lann Martin <[email protected]>
1 parent fd97aac commit a10f1c8

File tree

4 files changed

+54
-50
lines changed

4 files changed

+54
-50
lines changed

crates/factor-wasi/src/lib.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
pub mod preview1;
22

3-
use spin_factors::{Factor, InitContext, InstancePreparer, PrepareContext, Result, SpinFactors};
3+
use spin_factors::{
4+
Factor, FactorInstancePreparer, InitContext, PrepareContext, Result, SpinFactors,
5+
};
46
use wasmtime_wasi::{ResourceTable, WasiCtx, WasiCtxBuilder, WasiView};
57

68
pub struct WasiFactor;
79

810
impl Factor for WasiFactor {
9-
type InstancePreparer = Builder;
11+
type InstancePreparer = InstancePreparer;
1012
type InstanceState = InstanceState;
1113

1214
fn init<Factors: SpinFactors>(&mut self, mut ctx: InitContext<Factors, Self>) -> Result<()> {
@@ -42,11 +44,11 @@ impl Factor for WasiFactor {
4244
}
4345
}
4446

45-
pub struct Builder {
47+
pub struct InstancePreparer {
4648
wasi_ctx: WasiCtxBuilder,
4749
}
4850

49-
impl InstancePreparer<WasiFactor> for Builder {
51+
impl FactorInstancePreparer<WasiFactor> for InstancePreparer {
5052
fn new<Factors: SpinFactors>(
5153
_factor: &WasiFactor,
5254
_ctx: PrepareContext<Factors>,

crates/factor-wasi/src/preview1.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use spin_factors::{
2-
Factor, InstancePreparer, ModuleInitContext, PrepareContext, Result, SpinFactors,
2+
Factor, FactorInstancePreparer, ModuleInitContext, PrepareContext, Result, SpinFactors,
33
};
44
use wasmtime_wasi::{preview1::WasiP1Ctx, WasiCtxBuilder};
55

66
pub struct WasiPreview1Factor;
77

88
impl Factor for WasiPreview1Factor {
9-
type InstancePreparer = Builder;
9+
type InstancePreparer = InstancePreparer;
1010
type InstanceState = WasiP1Ctx;
1111

1212
fn module_init<Factors: SpinFactors>(
@@ -17,11 +17,11 @@ impl Factor for WasiPreview1Factor {
1717
}
1818
}
1919

20-
pub struct Builder {
20+
pub struct InstancePreparer {
2121
wasi_ctx: WasiCtxBuilder,
2222
}
2323

24-
impl InstancePreparer<WasiPreview1Factor> for Builder {
24+
impl FactorInstancePreparer<WasiPreview1Factor> for InstancePreparer {
2525
fn new<Factors: SpinFactors>(
2626
_factor: &WasiPreview1Factor,
2727
_ctx: PrepareContext<Factors>,

crates/factors-derive/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ fn expand_factors(input: &DeriveInput) -> syn::Result<TokenStream> {
100100
};
101101
#(
102102
preparers.#factor_names = Some(
103-
#factors_path::InstancePreparer::<#factor_types>::new::<#name>(
103+
#factors_path::FactorInstancePreparer::<#factor_types>::new::<#name>(
104104
&self.#factor_names,
105105
#factors_path::PrepareContext::new(&mut preparers),
106106
)?
107107
);
108108
)*
109109
Ok(#state_name {
110110
#(
111-
#factor_names: #factors_path::InstancePreparer::<#factor_types>::prepare(
111+
#factor_names: #factors_path::FactorInstancePreparer::<#factor_types>::prepare(
112112
preparers.#factor_names.unwrap()
113113
)?,
114114
)*

crates/factors/src/lib.rs

+42-40
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub type Linker<Factors> = wasmtime::component::Linker<<Factors as SpinFactors>:
1212
pub type ModuleLinker<Factors> = wasmtime::Linker<<Factors as SpinFactors>::InstanceState>;
1313

1414
pub trait Factor: Any + Sized {
15-
type InstancePreparer: InstancePreparer<Self>;
15+
type InstancePreparer: FactorInstancePreparer<Self>;
1616
type InstanceState;
1717

1818
/// Initializes this Factor for a runtime. This will be called exactly once
@@ -35,9 +35,12 @@ pub trait Factor: Any + Sized {
3535
}
3636
}
3737

38+
type GetDataFn<Factors, Fact> =
39+
fn(&mut <Factors as SpinFactors>::InstanceState) -> &mut <Fact as Factor>::InstanceState;
40+
3841
pub struct FactorInitContext<'a, Factors: SpinFactors, Fact: Factor, Linker> {
3942
linker: &'a mut Linker,
40-
get_data: fn(&mut Factors::InstanceState) -> &mut Fact::InstanceState,
43+
get_data: GetDataFn<Factors, Fact>,
4144
}
4245

4346
pub type InitContext<'a, Factors, Fact> = FactorInitContext<'a, Factors, Fact, Linker<Factors>>;
@@ -47,17 +50,18 @@ pub type ModuleInitContext<'a, Factors, Fact> =
4750

4851
impl<'a, Factors: SpinFactors, Fact: Factor, Linker> FactorInitContext<'a, Factors, Fact, Linker> {
4952
#[doc(hidden)]
50-
pub fn new(
51-
linker: &'a mut Linker,
52-
get_data: fn(&mut Factors::InstanceState) -> &mut Fact::InstanceState,
53-
) -> Self {
53+
pub fn new(linker: &'a mut Linker, get_data: GetDataFn<Factors, Fact>) -> Self {
5454
Self { linker, get_data }
5555
}
5656

5757
pub fn linker(&mut self) -> &mut Linker {
5858
self.linker
5959
}
6060

61+
pub fn get_data_fn(&self) -> GetDataFn<Factors, Fact> {
62+
self.get_data
63+
}
64+
6165
pub fn link_bindings(
6266
&mut self,
6367
add_to_linker: impl Fn(
@@ -70,7 +74,23 @@ where {
7074
}
7175
}
7276

77+
pub trait FactorInstancePreparer<T: Factor>: Sized {
78+
fn new<Factors: SpinFactors>(factor: &T, _ctx: PrepareContext<Factors>) -> Result<Self>;
79+
80+
fn prepare(self) -> Result<T::InstanceState>;
81+
}
82+
83+
pub struct PrepareContext<'a, Factors: SpinFactors> {
84+
instance_preparers: &'a mut Factors::InstancePreparers,
85+
// TODO: component: &'a AppComponent,
86+
}
87+
7388
impl<'a, Factors: SpinFactors> PrepareContext<'a, Factors> {
89+
#[doc(hidden)]
90+
pub fn new(instance_preparers: &'a mut Factors::InstancePreparers) -> Self {
91+
Self { instance_preparers }
92+
}
93+
7494
pub fn instance_preparer_mut<T: Factor>(&mut self) -> Result<&mut T::InstancePreparer> {
7595
let err_msg = match Factors::instance_preparer_mut::<T>(self.instance_preparers) {
7696
Some(Some(preparer)) => return Ok(preparer),
@@ -84,6 +104,22 @@ impl<'a, Factors: SpinFactors> PrepareContext<'a, Factors> {
84104
}
85105
}
86106

107+
pub type DefaultInstancePreparer = ();
108+
109+
impl<T: Factor> FactorInstancePreparer<T> for DefaultInstancePreparer
110+
where
111+
T::InstanceState: Default,
112+
{
113+
fn new<Factors: SpinFactors>(factor: &T, ctx: PrepareContext<Factors>) -> Result<Self> {
114+
(_, _) = (factor, ctx);
115+
Ok(())
116+
}
117+
118+
fn prepare(self) -> Result<T::InstanceState> {
119+
Ok(Default::default())
120+
}
121+
}
122+
87123
/// Implemented by `#[derive(SpinFactors)]`
88124
pub trait SpinFactors: Sized {
89125
type InstancePreparers;
@@ -179,37 +215,3 @@ impl<T, U, V> Clone for Getter2<T, U, V> {
179215
}
180216
}
181217
impl<T, U, V> Copy for Getter2<T, U, V> {}
182-
183-
pub trait InstancePreparer<T: Factor>: Sized {
184-
fn new<Factors: SpinFactors>(_factor: &T, _ctx: PrepareContext<Factors>) -> Result<Self>;
185-
186-
fn prepare(self) -> Result<T::InstanceState>;
187-
}
188-
189-
pub struct PrepareContext<'a, Factors: SpinFactors> {
190-
instance_preparers: &'a mut Factors::InstancePreparers,
191-
// TODO: component: &'a AppComponent,
192-
}
193-
194-
impl<'a, Factors: SpinFactors> PrepareContext<'a, Factors> {
195-
#[doc(hidden)]
196-
pub fn new(instance_preparers: &'a mut Factors::InstancePreparers) -> Self {
197-
Self { instance_preparers }
198-
}
199-
}
200-
201-
pub type DefaultInstancePreparer = ();
202-
203-
impl<T: Factor> InstancePreparer<T> for DefaultInstancePreparer
204-
where
205-
T::InstanceState: Default,
206-
{
207-
fn new<Factors: SpinFactors>(factor: &T, ctx: PrepareContext<Factors>) -> Result<Self> {
208-
(_, _) = (factor, ctx);
209-
Ok(())
210-
}
211-
212-
fn prepare(self) -> Result<T::InstanceState> {
213-
Ok(Default::default())
214-
}
215-
}

0 commit comments

Comments
 (0)