Как импортировать крейт как дополнительный модуль?

Я хотел бы импортировать ящик в свою библиотеку, а затем использовать этот ящик, как если бы он был модулем в моей библиотеке. Если я сделаю это:

extern crate sdl2;
pub use sdl2;

Это дает мне ошибку, предлагая использовать sdl2::*, но я не хочу перетаскивать все имена из ящика в свою библиотеку, я хочу, чтобы они адресулись как подмодуль, например:

my_library::sdl2::init()

Я также пробовал это:

pub extern crate sdl2;

Это компилируется, но я понятия не имею, что он делает. Однако это не делает ящик общедоступным из моей библиотеки.


person Benjamin Lindley    schedule 20.10.2015    source источник


Ответы (2)


Вы можете использовать переименование в use и extern crate:

extern crate sdl2 as sdl2_;
pub use sdl2_ as sdl2;

Я лично нашел, как это сделать в ящике stdx (который, похоже, устарел/заброшен, по крайней мере, теперь).

person Vladimir Matveev    schedule 20.10.2015

Другой обходной путь:

extern crate sdl2;
mod sdl2 {
    pub use ::sdl2::*;
}

Должно работать - хотя не проверено.

person Lukas Kalbertodt    schedule 20.10.2015