Data Struct
#[data_struct] is a struct annotation used to mark a struct as a pure data struct, allowing it to be directly deserialized within a contract. This feature is designed to facilitate developers in retrieving data from external data sources.
Example
module my_project::my_module {
    #[data_struct]
    struct MyData has copy, drop {
        value: u64,
        name: vector<u8>,
    }
}With this annotation, developers can directly deserialize the MyData struct within a contract:
let data: MyData = moveos_std::bcs::from_bytes(bytes);The moveos_std::bcs::from_bytes function also uses the #[data_struct(T)] annotation to ensure that T must be a #[data_struct] type.
module moveos_std::bcs {
    #[data_struct(T)]
    /// Function to deserialize a type T.
    /// The `data_struct` annotation ensures that `T` must be a `#[data_struct]` type.
    public fun from_bytes<T>(bytes: vector<u8>): T;
}How It Works
The #[data_struct] annotation is implemented based on the Move verifier, which checks the struct definition at compile time to ensure it meets the data_struct requirements. Additionally, the contract is re-verified during deployment.
Data Struct Specification
💡
TODO: This part of the document needs improvement.