小编xrl*_*xrl的帖子

颠覆Rust的类型系统,用于printf式调试

我正在进行serde Serializer实现,我想在机器深处调试值.也就是说,我想调试传递给序列序列化器的值 - 我想用我cargo test当前被序列化的值炸出我的运行.

fn serialize_seq_elt<T>(&mut self, value: T) -> Result<(), Self::Error> where T: Serialize {
    Err(CdrError{
        reason: format!("{:?}", value)
    })
//        value.serialize(self) // previous, type checked-code
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我在编译时遇到错误:

   Compiling rtps v0.1.0 (file:///Users/xavierlange/code/dds/rtps)
src/cdr/ser.rs:98:37: 98:42 error: the trait bound `T: std::fmt::Debug` is not satisfied [E0277]
src/cdr/ser.rs:98             reason: format!("{:?}", value)
                                                      ^~~~~
Run Code Online (Sandbox Code Playgroud)

这是真的,serde Serializer不强制Debug性格.是否有宏观或其他方式来解决它?我是否需要破解serde库以添加相关特征?

serialization types rust

3
推荐指数
1
解决办法
109
查看次数

如何替换std :: env:args()中的条目?

我想为Rust程序中的线程提供单独的名称.这些名称应该出现在top/中htop我可以区分线程的工作.在Ruby中我会修改argv[0]条目,或者也许Process.setproctitle("foo").我的灵感来自Ruby的Unicorn网络服务器.

env::args函数返回一个Args值.该Args值包装特定于平台的std::sys::args::args()函数,该函数不会重新导出以供一般使用.ArgsOs没有可用的mutator(所以是的,stdlib明确表示它是不可变的).

我如何以其他方式改变参数?我很满意只有Linux的解决方案,因为这是真正的工作将要发生的地方.stdlib外的解决方案也很好.

我应该采取什么样的路径来修改流程环境中的第一个参数?

std command-line-arguments rust

3
推荐指数
1
解决办法
326
查看次数

将值切片转换为字节切片

我正在尝试一个 API,调用者提供一个Vec<Point>他们希望我填写的数据。他们可以通过创建向量来分配向量中的空间,with_capacity然后通过执行 来推出其大小push(Point{...})。然后,我将使用磁盘中的字节填充底层缓冲区,根据需要切换其字节序表示,然后将其作为Vec<Point>.

这是获取向量并用数据填充它的函数。问题在于,transmute 仅在类型大小相同时才起作用,aPoint为 12 字节,而 transmute 会丢弃其中的 11 个字节。

fn read_points(&self, offset: u64, points: &mut [point::Point]) {
    let mut file = self.handle.borrow_mut();
    file.seek(SeekFrom::Start(offset)).unwrap();

    // bleep bloorp. danger!
    let points_buf : &mut [u8] = unsafe { mem::transmute(points) };
    file.read(points_buf).unwrap();

    // should take the 12 bytes and do the endian swaps
    for mut chunk in points_buf.chunks_mut(point::POINT_SIZE) {
        let point = point::buf_to_point(chunk);
        let buf : &mut [u8] = &mut chunk;
        point::fill_buf(buf, …
Run Code Online (Sandbox Code Playgroud)

casting vector rust

2
推荐指数
1
解决办法
3601
查看次数

EmberJS simpleauth,设计授权者不发送令牌头

我无法弄清楚如何ember-simple-auth使用ember-simple-auth-devise授权器(版本0.7.2)将令牌标头附加到我的后端请求.

这是我的config/environment.js样子:

  var ENV = {
    modulePrefix: 'frontend-app',
    environment: environment,
    baseURL: '/',
    locationType: 'auto',
    EmberENV: {
      FEATURES: {}
    },

    APP: {},

    'simple-auth': {
      authenticationRoute: 'sign-in',
      authorizer: 'simple-auth-authorizer:devise'
    }
  };

  if (environment === 'development') {
    // ENV.APP.LOG_RESOLVER = true;
    // ENV.APP.LOG_ACTIVE_GENERATION = true;
    ENV.APP.LOG_TRANSITIONS = true;
    // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
    // ENV.APP.LOG_VIEW_LOOKUPS = true;

    ENV.contentSecurityPolicy = {
      'font-src': "'self' http://fonts.gstatic.com",
      'style-src': "'self' 'unsafe-inline' http://fonts.googleapis.com",
      'connect-src': "'self' http://localhost:3000",
    };

    ENV['simple-auth-devise'] = {
      serverTokenEndpoint: "//localhost:3000/users/sign_in" …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise ember.js ember-cli ember-simple-auth

1
推荐指数
1
解决办法
422
查看次数

匹配File :: create的结果

我正在尝试编写一个必须打开文件的库,我想处理使用的Result类型std::fs::File::create.鉴于此包装函数,我无法弄清楚如何匹配返回结果:

use std::fs::File;
use std::path::Path;
use std::fs::File;
use std::path::Path;

pub fn allocate(path:& str) -> File{
  let mut file = File::create(Path::new(path));
}
Run Code Online (Sandbox Code Playgroud)

然后调用:

mod whisper;
use std::io::Write;

fn main(){
  let mut handle = whisper::allocate("./a_file.wsp");

  match handle {
    Ok(_) => println!("success!"),
    Err(e) => println!("sorry, got {}",e),
  }

  return;
}
Run Code Online (Sandbox Code Playgroud)

但由于类型不匹配,代码无法编译:

Xaviers-MacBook-Pro:graphite-rust xavierlange$ cargo build
   Compiling graphite-rust v0.0.1 (file:///Users/xavierlange/code/viasat/graphite-rust)
src/main.rs:8:5: 8:10 error: mismatched types:
 expected `std::fs::File`,
    found `core::result::Result<_, _>`
(expected struct `std::fs::File`,
    found enum `core::result::Result`) [E0308]
src/main.rs:8     Ok(_) => …
Run Code Online (Sandbox Code Playgroud)

error-handling rust

1
推荐指数
1
解决办法
769
查看次数

如何管理 Kafka 组的过期

我试图通过删除消费者配置并让我的脚本稍后重新创建它来重置消费者配置,但我遇到了关于新消费者不可删除的错误。

kafka@kafka-0:~$ ./bin/kafka-consumer-groups.sh --bootstrap kafka-0:9092 --delete --group etl
Option '[delete]' is only valid with '[zookeeper]'. Note that there's no need to delete group metadata for the new consumer as the group is deleted when the last committed offset for that group expires.
Run Code Online (Sandbox Code Playgroud)

现在我想知道,控制此错误消息过期的消费者配置选项的名称是什么?

stream offset apache-kafka

1
推荐指数
1
解决办法
4488
查看次数