✨ Continuemos con el desarrollo este día. Cada vez conoces mas de Sui y Sui Move, es por ello que poco a poco estos temas serán mas simples de entender, evaluar y asimilar.
Ya casi llegamos a la mitad 🔥
<aside> ❓ Recuerda que en el discord de Zona Tres resolvemos tus dudas en el canal de #preguntas. No dudes de utilizar este espacio para avanzar
</aside>
El día de hoy deberás ser capaz de lo siguiente:
Que pasa si manejamos bastantes campos dentro de nuestros objetos o simplemente tenemos algunos que no utilizamos tanto. Sui Move tiene la opción de crear objetos dinámicos en los cuales a través de funciones pueda crear o eliminar campos dentro de mis objetos. Estos pueden ser:
Definimos las siguientes estructuras:
// Parent struct
struct Parent has key {
id: UID,
}
// Dynamic Field child struct type containing a counter
struct DFChild has store {
count: u64
}
// Dynamic Object Field child struct type containing a counter
struct DOFChild has key, store {
id: UID,
count: u64,
}
Integramos las API de dynamic fields y dynamic objects field asi como los metodos para añadir un nuevo campo en las estructuras:
module collection::dynamic_fields {
// importamos las APIs de Sui
use sui::dynamic_object_field as ofield;
use sui::dynamic_field as field;
// Adds a DFChild to the parent object under the provided name
public fun add_dfchild(parent: &mut Parent, child: DFChild, name: vector<u8>) {
field::add(&mut parent.id, name, child);
}
// Adds a DOFChild to the parent object under the provided name
public entry fun add_dofchild(parent: &mut Parent, child: DOFChild, name: vector<u8>) {
ofield::add(&mut parent.id, name, child);
}
}
Ademas de poder leer directamente estos campos dinámicos creados en nuestros objetos:
// Borrows a reference to a DOFChild
public fun borrow_dofchild(child: &DOFChild): &DOFChild {
child
}
// Borrows a reference to a DFChild via its parent object
public fun borrow_dfchild_via_parent(parent: &Parent, child_name: vector<u8>): &DFChild {
field::borrow<vector<u8>, DFChild>(&parent.id, child_name)
}
// Borrows a reference to a DOFChild via its parent object
public fun borrow_dofchild_via_parent(parent: &Parent, child_name: vector<u8>): &DOFChild {
ofield::borrow<vector<u8>, DOFChild>(&parent.id, child_name)
}