Tôi đang cố gắng sử dụng macro mà tôi đã tạo trong một mô-đun riêng biệt. Với tham chiếu đến this SO question, tôi đã nhập tiền phạt macro. Tuy nhiên có vẻ như rằng tôi cóTại sao tôi phải phơi bày 'sử dụng' của macro trong thư viện khách hàng?
Update để thêm thi hành vĩ mô
lib.rs
#![macro_use]
use std::fmt;
use std::ffi::CString;
use std::ffi::CStr;
use std::str;
extern crate libc;
pub enum DbaxError {
DBAXException(String)
}
#[macro_export]
macro_rules! dbax_call_test {
($func : expr) => {
{
let call_c_func = unsafe { dbax_function(CString::new($func).unwrap().as_ptr(),0) };
match unsafe { getErrorCode() as i32 } {
0 => Ok("Done".to_owned() + $func),
_ => Err(DbaxError::DBAXException(str::from_utf8(unsafe { CStr::from_ptr(getError()) }.to_bytes()).unwrap().to_string()))
}
}
}
}
và main.rs trong một thùng riêng
// Import macro
#[macro_use] extern crate rustdbax;
// Import implementation details of macro
use rustdbax::*;
use std::ffi::CString;
use std::ffi::CStr;
use std::str;
fn main() {
// Call my macro
dbax_call_test!("DateAdd");
}
này hoạt động tốt, nhưng use std::*
dòng là tất cả các phần của việc triển khai trong lib.rs
.
Tại sao tôi phải để lộ 'sử dụng' của triển khai trong thư viện khách hàng? Không nên rỉ sét như là một phần của nó mở rộng 'bao gồm' bất cứ điều gì là trong lib.rs
?