es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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ónProject: Serializeno se cumple, nota: requerido por una restricción ennear_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ónUnorderedMap<u64, project=””>: Serializeno se cumple, nota: requerido pornear_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,>

Tags:  , ,

Answer

  1. Avatar for 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:

    [dependencies]
    near-sdk = "4.0.0-pre.2"
    serde_cbor = { version = "0.11.1", features = ["alloc"] }
    

    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:

    use near_sdk::serde::{Serialize, Deserialize};
    use near_sdk::{near_bindgen, BorshDeserialize, BorshSerialize, PanicOnDefault, UnorderedMap, LookupMap};
    
    #[derive(BorshDeserialize, BorshSerialize, Debug, Serialize, Deserialize)]
    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, Serialize, Deserialize)]
    #[serde(crate = "near_sdk::serde")]
    pub struct Nearkick {
        current_id: u64,
        projects: UnorderedMap<u64, project="">,
    }
    

    Esto debería solucionar los errores de serialización y deserialización. Ten en cuenta que debes importar tanto los traits Serialize como Deserialize de near_sdk::serde y especificar el atributo serde con el nombre del paquete near_sdk::serde para asegurarte de que se utilice CBOR para la serialización y deserialización.</u64,></supporterlevel,></accountid,>

Comments are closed.