在rust-cpython中将Rust结构转换为PyObject

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在rust-cpython中将Rust结构转换为PyObject相关的知识,希望对你有一定的参考价值。

我正在使用rust-cpython来编写可在Python中调用的Rust函数。

我有一个用作输出的现有结构。如何将其转换为rust-cpython可以理解的PyObject?

我的结构看起来像这样:

struct Block {
    start: i32,
    stop: i32,
}
答案

我的编译错误说我需要在我的struct上实现ToPyObject特性。为了在一个PyObject类型中表示我的结构,我决定使用PyDict。

我看看rust-cpython是如何为HashMap做的,我只是把它复制过来。

impl ToPyObject for Block {
    type ObjectType = PyDict;

    fn to_py_object(&self, py: Python) -> PyDict {
        let dict = PyDict::new(py);
        dict.set_item(py, "start", self.start).unwrap();
        dict.set_item(py, "stop", self.stop).unwrap();

        dict
    }
}

这是一种破解,但它允许我传递带有命名字段的数据作为键。

以上是关于在rust-cpython中将Rust结构转换为PyObject的主要内容,如果未能解决你的问题,请参考以下文章

在 Rust 中将二进制字符串转换为带有前导零的十六进制字符串

在 Rust 中将结构作为参数传递

如何在 Rust 中将字符串拆分为块以插入空格

rust拓展包是什么内容

Rust如何尊重复制特性?

将 C++ 'extern "C" __declspec(dllexport)' 结构转换为 Rust 的问题