iota_types/
move_layout.rs1use iota_sdk_move_types::iota_framework::object::{ID, UID};
6use iota_sdk_types::StructTag;
7use move_core_types::{
8 annotated_value::{MoveFieldLayout, MoveStructLayout, MoveTypeLayout},
9 ident_str,
10};
11
12use crate::iota_sdk_types_conversions::struct_tag_sdk_to_core;
13
14mod sealed {
15 pub trait Sealed {}
16 impl Sealed for super::ID {}
17 impl Sealed for super::UID {}
18}
19
20pub trait MoveLayout: Sized + sealed::Sealed {
21 fn layout() -> MoveStructLayout;
22}
23
24impl MoveLayout for ID {
25 fn layout() -> MoveStructLayout {
26 MoveStructLayout {
27 type_: struct_tag_sdk_to_core(&StructTag::new_id()),
28 fields: vec![MoveFieldLayout::new(
29 ident_str!("bytes").to_owned(),
30 MoveTypeLayout::Address,
31 )],
32 }
33 }
34}
35
36impl MoveLayout for UID {
37 fn layout() -> MoveStructLayout {
38 MoveStructLayout {
39 type_: struct_tag_sdk_to_core(&StructTag::new_uid()),
40 fields: vec![MoveFieldLayout::new(
41 ident_str!("id").to_owned(),
42 MoveTypeLayout::Struct(Box::new(ID::layout())),
43 )],
44 }
45 }
46}