Error[E0277]: no se cumple la limitación de rasgo `Project: Serialize`, nota: requerida por una limitación en `near_sdk::serde_json::to_vec`. Esta sería la traducción del error al español.
#[derive(BorshDeserialize, BorshSerialize, Debug)]
pub struct Project {
pub name: String,
pub description: String,
pub image: String,
pub owner: AccountId,
pub supporters: UnorderedMap<accountid, supporter="">,
pub balance: u128,
pub goal: u128,
pub end_time: u64,
pub status: ProjectStatus,
pub plan: SupporterPlans,
pub level_amounts: LookupMap<supporterlevel, u128="">,
}
#[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)]
pub struct Nearkick {
current_id: u64,
projects: UnorderedMap<u64, project="">,
}
Este problema causa el error error[E0277]: la restricción
Project: Serializeno se cumple, nota: requerido por una restricción en
near_sdk::serde_json::to_vec`.
Si agrego Serialize
y Deserialize
a ellas de la siguiente manera:
#[near_bindgen]
#[derive(Serialize, Deserialize, BorshDeserialize, BorshSerialize, PanicOnDefault)]
#[serde(crate = "near_sdk::serde")]
pub struct Nearkick {
current_id: u64,
projects: UnorderedMap<u64, project="">,
}
Obtengo este error error[E0277]: la restricción
UnorderedMap<u64, project=””>: Serializeno se cumple, nota: requerido por
near_sdk::serde::ser::SerializeStruct::serialize_field`.
Cargo.toml
[lib]
crate-type = ["cdylib"]
[dependencies]
near-sdk = "4.0.0-pre.2"
[profile.release]
codegen-units = 1
opt-level = "z"
lto = true
debug = false
panic = "abort"
overflow-checks = true
He intentado agregar Serialize
y Deserialize
a todas mis estructuras (structs) y enumeraciones (enums), pero aún obtengo el error.</u64,></u64,></u64,></supporterlevel,></accountid,>
davy.ai
El problema está relacionado con el hecho de que UnorderedMap y LookupMap no implementan los traits Serialize y Deserialize de forma predeterminada. Para solucionar esto, puedes utilizar el paquete serde-cbor ya que admite la serialización y deserialización de estructuras de datos complejas como UnorderedMap y LookupMap.
Aquí te mostramos cómo puedes modificar tu archivo Cargo.toml para utilizar serde-cbor en lugar de serde_json:
A continuación, debes usar el atributo
serde
para indicarle a Serde que utilice CBOR para la serialización y deserialización, de la siguiente manera:Esto debería solucionar los errores de serialización y deserialización. Ten en cuenta que debes importar tanto los traits
Serialize
comoDeserialize
denear_sdk::serde
y especificar el atributoserde
con el nombre del paquetenear_sdk::serde
para asegurarte de que se utilice CBOR para la serialización y deserialización.</u64,></supporterlevel,></accountid,>