Какие пошаговые действия необходимо предпринять, чтобы повысить уровень холостой ржавчины с 0.0.1 до 0.0.2? - PullRequest
0 голосов
/ 29 ноября 2018

Я начал с просмотра заметок 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(),
    }
}

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Миграция с 0.0.1 на 0.0.2 была именно тем, что я недавно сделал для примера списка задач.Я только что создал ветку для старой версии, чтобы вы могли сравнить два

По памяти некоторые из полученных ошибок:

  • commit_entry теперь берет единственную ссылку на объект Entry
  • Ссылки должны быть включены как часть define_zome!или их невозможно создать
  • перейти от значения serde_json к JsonString
  • Необходимо включить holochain_core_types_derive = { git = "https://github.com/holochain/holochain-rust" , tag = "holochain-cmd-v0.0.2" } в cargo.toml
  • Ответы от get_entry являются общими типами записей и могут бытьпреобразовать в локальный тип, скажем, ListEntry, как ListEntry::try_from(entry.value())

Их намного больше, поэтому лучше всего проверить репо.

0 голосов
/ 30 ноября 2018

Для ошибки 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, чтобы узнать больше об этом, это очень хорошо

...