Skip to main content

iota_types/
move_layout.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2026 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use 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}