1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::{
identifier::{IdentStr, Identifier},
language_storage::{StructTag, TypeTag},
};
use serde::de::DeserializeOwned;
pub trait MoveStructType {
const MODULE_NAME: &'static IdentStr;
const STRUCT_NAME: &'static IdentStr;
fn module_identifier() -> Identifier {
Self::MODULE_NAME.to_owned()
}
fn struct_identifier() -> Identifier {
Self::STRUCT_NAME.to_owned()
}
fn type_params() -> Vec<TypeTag> {
vec![]
}
fn struct_tag() -> StructTag {
StructTag {
address: crate::language_storage::CORE_CODE_ADDRESS,
name: Self::struct_identifier(),
module: Self::module_identifier(),
type_params: Self::type_params(),
}
}
}
pub trait MoveResource: MoveStructType + DeserializeOwned {
fn resource_path() -> Vec<u8> {
Self::struct_tag().access_vector()
}
}