Rust 从另一个板条箱在类型上实现std::convert::From

Rust 从另一个板条箱在类型上实现std::convert::From,rust,Rust,我有一个外部geometry板条箱,它定义了一个由浮点数组成的矩形结构,还有一个外部sdl2板条箱,它定义了一个由整数组成的矩形结构 下面的代码是如何使用std::convert::From特性将geometry::Rect转换为sdl2::SdlRect: extern crate geometry; extern crate sdl2; fn main() { let geo_rect = geometry::Rect::default(); let sdl_rect =

我有一个外部
geometry
板条箱,它定义了一个由浮点数组成的矩形结构,还有一个外部
sdl2
板条箱,它定义了一个由整数组成的矩形结构

下面的代码是如何使用
std::convert::From
特性将
geometry::Rect
转换为
sdl2::SdlRect

extern crate geometry;
extern crate sdl2;

fn main() {
    let geo_rect = geometry::Rect::default();
    let sdl_rect = sdl2::SdlRect::from(geo_rect);
}

impl From<geometry::Rect> for sdl2::SdlRect {
    fn from (rect: geometry::Rect) -> sdl2::SdlRect {
        sdl2::SdlRect {
            x: rect.x as i32,
            y: rect.y as i32,
            w: rect.w as i32,
            h: rect.h as i32,
        }
    }
}
extern crate geometry;
extern crate sdl2;

fn main() {
    let geo_rect = geometry::Rect::default();
    let sdl_rect = sdl2::SdlRect::my_from(geo_rect);
}

pub trait MyFrom<T> {
    fn my_from(T) -> Self;
}

impl MyFrom<geometry::Rect> for sdl2::SdlRect {
    fn my_from (rect: geometry::Rect) -> sdl2::SdlRect {
        sdl2::SdlRect {
            x: rect.x as i32,
            y: rect.y as i32,
            w: rect.w as i32,
            h: rect.h as i32,
        }
    }
}

我对这个解决方案不是特别满意,因为知道什么时候从而不是从调用
my_会让人感到困惑。是否有其他方法可以使用更惯用的Rust解决此问题?

最好定义自己的矩形类型,该类型封装外部定义的矩形,并使用标准的
From
trait


这是该模式的一种可能用途。

在当前的情况下,新类型模式似乎还没有完成——虽然有一些板条箱试图绕过其限制,但就目前而言,尝试和实现起来很麻烦,代码也没有变得更简单。我最后做的是将
my_从
方法更改为
从_sdl
。从_sdl
命名方法
与标准库的
CStr::from _bytes
方法一致。