LINUX.ORG.RU

История изменений

Исправление Virtuos86, (текущая версия) :

#[derive(Debug)]
struct Point2D(usize, usize);

#[derive(Debug)]
struct Size2D(usize, usize);

#[derive(Debug)]
struct Rect {
    point: Point2D,
    size: Size2D
}

impl Rect {
    fn new(point: Point2D, size: Size2D) -> Self {
        Self { point, size }
    }
}

impl std::convert::From<(usize, usize, usize, usize)> for Rect {
    fn from(rect: (usize, usize, usize, usize)) -> Self {
        Self { point: Point2D(rect.0, rect.1), size: Size2D(rect.2, rect.3) }
    }
}

fn main() {
    let (x, y, w, h) = (0, 1, 2, 3);
    let rect1 = Rect::new(Point2D(x, y), Size2D(w, h));
    let rect2 = Rect::from((x, y, w, h));
    println!("rect1 = {:?}\nrect2 = {:?}", rect1, rect2);
}

https://play.rust-lang.org/?gist=49280f8c9c27cc658ffd7ed1f4592f09&version...

Исходная версия Virtuos86, :

#[derive(Debug)]
struct Point2D(usize, usize);

#[derive(Debug)]
struct Size2D(usize, usize);

#[derive(Debug)]
struct Rect {
    point: Point2D,
    size: Size2D
}

impl Rect {
    fn new(point: Point2D, size: Size2D) -> Self {
        Self { point, size }
    }
}

impl std::convert::From<(usize, usize, usize, usize)> for Rect {
    fn from(rect: (usize, usize, usize, usize)) -> Self {
        Self { point: Point2D(rect.0, rect.1), size: Size2D(rect.2, rect.3) }
    }
}

fn main() {
    let (x, y, w, h) = (0, 1, 2, 3);
    let rect1 = Rect::new(Point2D(x, y), Size2D(w, h));
    let rect2 = Rect::from((x, y, w, h));
    println!("rect1 = {:?}\nrect2 = {:?}", rect1, rect2);
}

https://play.rust-lang.org/?gist=49280f8c9c27cc658ffd7ed1f4592f09&version...