Я начал с просмотра заметок API и сравнения их: https://developer.holochain.org/api/
Что я сделал до сих пор:
Подготовка:
Скачано и установлено 0.0.2и затем обновил bash_profile по этой ссылке: https://developer.holochain.org/start.html
JSON PARSE / Stringify update
Обновил все тесты, чтобы удалить все вызовы JSON.parse и JSON.stringify, поскольку они не являютсятребуется больше, например, заменив это:
JSON.stringify({})
на это:
{}
Обновление функции извлечения
Обновлены все производные функции в файлах определения zome (lib.rs), чтобы они включали Debug и DefaultJSON, например:
#[derive(Serialize, Deserialize, Debug, DefaultJson)]
Обновление Json String
Сделал глобальный поиски замените все файлы zome в JsonString, изменив вызов 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?
Обновление
Это ни в коем случае не исчерпывающий ответ, но вот некоторые дополнительные шаги, которые я нашел с помощью.
Вам также нужно будет отредактировать файл cargo.toml каждого zome, части зависимостей, чтобы он выглядел следующим образом:
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
Каждому зому нужно это как замена для всего, что выше функции #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`
Я попытаюсь решить эту проблему, заменив вызовы serde_json в коде zome на 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`.
Что является ответом на это определение зоме:
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(),
}
}