我首先回顾了Api笔记并进行了比较:
https://developer.holochain.org/api/
到目前为止,我所做的是:
制备:
下载并安装了0.0.2,然后通过以下链接更新了bash_profile:
https://developer.holochain.org/start.html
JSON PARSE / Stringify更新
更新了所有测试,以删除不再需要的所有JSON.parse和JSON.stringify调用,例如,替换为:JSON.stringify({})
有了这个:{}
派生功能更新
更新了zome定义文件(lib.rs)中的所有派生函数,以包括Debug和DefaultJSON,如下所示:#[derive(Serialize, Deserialize, Debug, DefaultJson)]
Json String更新
全局查找并替换了JsonString上的所有zome文件
更改serde_json调用看起来像这样:
更换-> serde_json::Value
与-> JsonString
所以看起来像这样:fn handle_create_action(action: Action, user_address: HashString) -> JsonString { ...
当前错误
我遇到这些错误:error: cannot find derive macro DefaultJson in this scope
error[E0412]: cannot find type JsonString in this scope
我们如何将它们导入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`
我将尝试通过使用JsonString替换zome代码中的serde_json调用来解决这一问题。
错误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 - 将整链生锈后端从0.0.1升级到0.0.2需要采取哪些逐步措施?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53547428/