gpt4 book ai didi

holochain - 将 holochain Rust 后端从 0.0.1 升级到 0.0.2 需要采取哪些分步操作?

转载 作者:行者123 更新时间:2023-12-02 02:47:53 26 4
gpt4 key购买 nike

我首先回顾了 Api 注释并进行了比较: https://developer.holochain.org/api/

到目前为止我做了什么:

准备:

已下载并安装 0.0.2,然后通过此链接更新 bash_profile: https://developer.holochain.org/start.html

JSON 解析/字符串化更新

更新了所有测试以删除不再需要的任何 JSON.parse 和 JSON.stringify 调用,例如替换为:

JSON.stringify({})

用这个:

{}

导出函数更新

更新了 zome 定义文件 (lib.rs) 中的所有派生函数以包括 Debug 和 DefaultJSON,如下所示:

#[derive(Serialize, Deserialize, Debug, DefaultJson)]

Json 字符串更新

是否对 JsonString 上的所有 zome 文件进行了全局查找和替换 将 serde_json 调用更改为如下所示:

替换

-> serde_json::Value

-> JsonString

看起来像这样:

fn handle_create_action(action: Action, user_address: HashString) ->
JsonString { ...

当前错误

我遇到了这些错误:

错误:在此范围内找不到派生宏 DefaultJson

错误[E0412]:在此范围内找不到类型 JsonString

我们如何将这些导入到 lib.rs 文件中?

更新

这绝不是一个全面的答案,但这里是我在帮助下找到的一些额外步骤。

您还需要编辑每个 zome 的 cargo.toml 文件,依赖部分,如下所示:

serde = "1.0"
serde_json = "1.0"
serde_derive = "1.0"
hdk = { git = "https://github.com/holochain/holochain-rust", branch = "master" }
holochain_core_types = { git = "https://github.com/holochain/holochain-rust", branch = "master" }
holochain_core_types_derive = { git = "https://github.com/holochain/holochain-rust", branch = "master" }
holochain_wasm_utils = { git = "https://github.com/holochain/holochain-rust", branch = "master" }

这是在规范应用程序中找到的,该应用程序已经与昨晚发生的版本保持最新,在此页面: https://github.com/holochain/dev-camp-tests-rust/blob/master/zomes/people/code/Cargo.toml

每个 zome 都需要它来替代 #derive 函数之上的所有内容:

#![feature(try_from)]
#[macro_use]
extern crate hdk;
extern crate serde;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate serde_json;
extern crate holochain_core_types;
#[macro_use]
extern crate holochain_core_types_derive;

use hdk::{
holochain_core_types::{
dna::zome::entry_types::Sharing,
hash::HashString,
json::JsonString,
entry::Entry,
entry::entry_type::EntryType,
error::HolochainError,
cas::content::Address,
},
};

这解决了编译时的初始错误,并在我运行 hc test 编译、构建和测试应用程序时通过终端反馈向我展示了下一层所需的更改...这就是我我现在看到..

错误 1

error[E0061]: this function takes 1 parameter but 2 parameters were supplied
--> src/lib.rs:56:11
|
56 | match hdk::commit_entry("metric", json!(metric)) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter

错误2

error[E0308]: mismatched types
--> src/lib.rs:60:24
|
60 | return json!({"link error": link_result.err().unwrap()});
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `holochain_core_types::json::JsonString`, found enum `serde_json::Value`

我将尝试通过将 zome 代码中的 serde_json 调用替换为 JsonString 来解决此问题...

错误3

error[E0609]: no field `links` on type `hdk::holochain_wasm_utils::api_serialization::get_links::GetLinksResult`
--> src/lib.rs:82:18
|
82 | .links
| ^^^^^ unknown field

错误4

error[E0599]: no method named `to_json` found for type `hdk::error::ZomeApiError` in the current scope
--> src/lib.rs:97:32
|
97 | "error": hdk_error.to_json()
| ^^^^^^^

更新2

@connorturlands 的回答帮助我解决了大部分错误,现在似乎又多了一个。

^^^^^^^^
|
= note: #[warn(unused_imports)] on by default

error[E0063]: missing fields `active`, `date_time`, `description` and 12 other fields in initializer of `Metric`
--> src/lib.rs:48:68
|
48 | let metric_entry = Entry::new(EntryType::App("metric".into()), Metric{
| ^^^^^^ missing `active`, `date_time`, `description` and 12 other fields

error: aborting due to previous error

For more information about this error, try `rustc --explain E0063`.
error: Could not compile `metrics`.

这是对这个 zome 定义的回应:

fn handle_create_metric(metric: Metric, user_address: HashString) -> JsonString {

let metric_entry = Entry::new(EntryType::App("metric".into()), Metric{
// => Here is where the error triggers... it wants me to define 'title, time, etc' but as a core function, I don't see the point, those will be inputted.. not sure how to address this
});
match hdk::commit_entry(&metric_entry) {
Ok(metric_address) => {
match hdk::link_entries(
&user_address,
&metric_address,
"metric_by_user"
) {
Ok(link_address) => metric_address.into(),
Err(e) => e.into(),
}
}
Err(hdk_error) => hdk_error.into(),
}
}

最佳答案

对于错误1,只需检查这个例子,并复制它: https://developer.holochain.org/api/0.0.2/hdk/api/fn.commit_entry.html

对于错误2,就做

link_result.into()

将其转换为 JsonString

对于错误3,使用

.addresses()

代替.links,可以在这里看到:https://developer.holochain.org/api/0.0.2/holochain_wasm_utils/api_serialization/get_links/struct.GetLinksResult.html

对于错误 4 就这样做

hdk_error.into()

并将其从 json 中删除!包装它看起来像你正在尝试:)

一般来说,如果你看到与 hdk 相关的引用,使用 API ref 的搜索功能来查找更多相关信息,非常好

关于holochain - 将 holochain Rust 后端从 0.0.1 升级到 0.0.2 需要采取哪些分步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com