linera_witty/type_traits/
mod.rs1mod implementations;
7mod register_wit_types;
8
9use std::borrow::Cow;
10
11pub use self::register_wit_types::RegisterWitTypes;
12use crate::{
13 GuestPointer, InstanceWithMemory, Layout, Memory, Runtime, RuntimeError, RuntimeMemory,
14};
15
16pub trait WitType {
18 const SIZE: u32;
20
21 type Layout: Layout;
23
24 type Dependencies: RegisterWitTypes;
26
27 fn wit_type_name() -> Cow<'static, str>;
29
30 fn wit_type_declaration() -> Cow<'static, str>;
32}
33
34pub trait WitLoad: WitType + Sized {
36 fn load<Instance>(
38 memory: &Memory<'_, Instance>,
39 location: GuestPointer,
40 ) -> Result<Self, RuntimeError>
41 where
42 Instance: InstanceWithMemory,
43 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
44
45 fn lift_from<Instance>(
49 flat_layout: <Self::Layout as Layout>::Flat,
50 memory: &Memory<'_, Instance>,
51 ) -> Result<Self, RuntimeError>
52 where
53 Instance: InstanceWithMemory,
54 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
55}
56
57pub trait WitStore: WitType {
59 fn store<Instance>(
61 &self,
62 memory: &mut Memory<'_, Instance>,
63 location: GuestPointer,
64 ) -> Result<(), RuntimeError>
65 where
66 Instance: InstanceWithMemory,
67 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
68
69 fn lower<Instance>(
74 &self,
75 memory: &mut Memory<'_, Instance>,
76 ) -> Result<<Self::Layout as Layout>::Flat, RuntimeError>
77 where
78 Instance: InstanceWithMemory,
79 <Instance::Runtime as Runtime>::Memory: RuntimeMemory<Instance>;
80}