This program contains 2 custom structs, Range and RangeCompressed. In Range, we have 2 usize fields, and in RangeCompressed, these fields have been changed to u16 fields.
struct Range {
start: usize,
end: usize,
}
struct RangeCompressed {
start: u16,
end: u16,
}
impl From<Range> for RangeCompressed {
fn from(range: Range) -> Self {
// For from, just cast the internal fields of the struct.
RangeCompressed {
start: range.start as u16,
end: range.end as u16,
}
}
}
fn main() {
// Version 1: use into to convert one struct to another with From trait.
let range = Range { start: 0, end: 10 };
let range_compressed: RangeCompressed = range.into();
println!(
"start: {} end: {}",
range_compressed.start, range_compressed.end
);
// Version 2: use from method for conversion.
let range2 = Range {
start: 50,
end: 100,
};
let range_compressed2 = RangeCompressed::from(range2);
println!(
"start: {} end: {}",
range_compressed2.start, range_compressed2.end
);
}
start: 0 end: 10
start: 50 end: 100