作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样的东西:
#[macro_use]
extern crate quick_error;
#[cfg(target_os = "linux")]
#[macro_use]
extern crate nix;
quick_error! {
#[derive(Debug)]
pub enum Error {
DeviceNotFound{
description("Could not find a ledger device")
}
Ioctl ( err: nix::Error ) {
from()
description("ioctl error")
display("ioctl error: {}", err)
cause(err)
}
}
}
我遇到的问题是 nix
仅在 linux 中可用。
如何使 Ioctl
成为 linux 的条件?或者这是个坏主意?
我想知道 Rust 中推荐的方法是什么。
另一种方法是:只要我不使用任何函数/方法,即使在 Windows 中我也可以使用 nix crate 类型吗?在那种情况下,我不需要将此作为条件。
更新:from()
行似乎与问题有关。
@Stargateur 绝对适用于大多数情况,但不适用于我的具体问题。我在这里添加 Example code .
#[macro_use]
extern crate quick_error;
quick_error! {
#[derive(Debug)]
pub enum Error {
DeviceNotFound{
description("Could not find a ledger device")
}
#[cfg(target_os = "windows")]
Ioctl ( err: nix::Error ) {
from()
description("ioctl error")
display("ioctl error: {}", err)
cause(err)
}
}
}
fn main() {
let _ = Error::DeviceNotFound;
}
最佳答案
所以在 quickerror 中使用条件编译是不可能的。经过一些实验后,我想出了在不存在的平台上模拟类型的想法:
#[macro_use]
extern crate quick_error;
#[macro_use]
extern crate cfg_if;
cfg_if! {
if #[cfg(target_os = "linux")] {
extern crate nix;
} else {
// Mock the type in other target_os
mod nix {
quick_error! {
#[derive(Debug)]
pub enum Error {}
}
}
}
}
quick_error! {
#[derive(Debug)]
pub enum Error {
DeviceNotFound{
description("Could not find a ledger device")
}
Ioctl ( err: nix::Error ) {
from()
description("ioctl error")
display("ioctl error: {}", err)
cause(err)
}
}
}
关于rust - 枚举中的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52229131/
我是一名优秀的程序员,十分优秀!