Почему crate не предоставляет тот же API со связанной ссылкой на репозиторий в `crates.io` - PullRequest
1 голос
/ 11 марта 2020

Я очень плохо знаком с синтаксисом ржавчины использования библиотек. Ну, в основном плохо знакомы с ржавчиной.

Я включил библиотеку, которая еще не закончена и, похоже, не работает. Библиотека называется "часами" , lib.rs содержит следующее:

// #[derive(Clone, Debug, PartialEq, Eq)]
pub struct Hours {
    pub rules: Vec<types::RuleSequence>,
    pub tz: Tz,
}

impl Hours {
    pub fn from(s: &str, tz: Tz) -> Result<Self, String> {
        //... abbreviated
    }

    pub fn at(self: &Self, dt: &DateTime<Tz>) -> types::Modifier {
        //... abbreviated
    }
}

Включено в Cargo.toml: соответствующие строки:

edition = "2018"

[dependencies]
hours = "0.0.1"

Я хочу знать, возможно ли включить и использовать функцию from(), пока мне не повезло. Вот что я попробовал:

use hours;
fn main() {
   //... abbreviated
   let hours = Hours::from(example_hrs, Amsterdam).unwrap();
}

Дает ошибку компиляции: Hours::from(example_hrs, Amsterdam).unwrap(); ^^^^^ use of undeclared type or module Hours``

use hours::Hours;
fn main() {
   //... abbreviated
   let hours = Hours::from(example_hrs, Amsterdam).unwrap();
}

Дает ошибку компиляции: use hours::Hours; ^^^^^^^^^^^^ no ``Hours`` in the root

use hours;
fn main() {
   //... abbreviated
   let hours = hours::Hours::from(example_hrs, Amsterdam).unwrap();
}

Дает ошибка компиляции: hours::Hours::from(example_hrs, Amsterdam).unwrap(); ^^^^^ could not find Часы in Часы``

Есть ли способ включить и использовать эту библиотеку? Нужно ли менять библиотеку или я просто неправильно ее использую?

1 Ответ

1 голос
/ 11 марта 2020

Проблема здесь, код в ссылке на репозиторий, которой вы поделились, не совпадает с зависимостью в crates.io и, естественно, Rust не может найти требуемые компоненты API. В этом случае владелец ящика еще не опубликовал код в gitlab.

Чтобы увидеть, что вы можете быстро проверить источник из docs.rs . Это ссылка для требуемой зависимости docs.rs / crate / hours / 0.0.1 / source / .

Если вы хотите использовать текущий код в хранилище

  • вы можете получить его локально, загрузив (или используя git клон), затем вы можете использовать его, указав путь в cargo.toml
  • или определив git хранилище прямо в машине go томл.
hours = { git = "https://gitlab.com/alantrick/hours.git", rev="7b7d369796c209db7b61db71aa7396f2ec59f942"}

Добавление номера ревизии или тега может помочь, поскольку обновления в главной ветви могут нарушить совместимость.


Почему это источник в docs.rs точен с crates.io?

Пожалуйста, проверьте раздел о в docs.rs :

Docs.rs автоматически создает документацию крейтов, выпущенную на crates.io, используя ночной выпуск компилятора Rust

Это означает, что он синхронизируется с crates.io.

Чтобы убедиться, что вы также можете проверить источник ящика из локального кэша хранилища.

## Note that this path is built with default cargo settings
$HOME/.cargo/registry/src/github.com-1ecc6299db9ec823/hours-0.0.1
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ github reigstry for crates io 

Почему ссылка на хранилище ящика в crates.io не совпадает с источник ящика

Пожалуйста, проверьте ящик публикации ссылка , repository информация указана в пакете metadatacargo.toml).

Согласно для упаковки метаданных ссылка эта информация используется для:

Эти URL-адреса указывают на дополнительную информацию о пакете. Предполагается, что это веб-просмотры соответствующих данных, не обязательно совместимые с инструментами VCS и т. П.

documentation = "..."
homepage = "..."
repository = "..."

Вы также можете проверить популярные ящики, они указывают на их github (обычно) главная страница, которая указывает основную ветвь, а не тег текущей версии.

...