Это не то же самое.Все перечисляемые элементы имеют одинаковый размер!Размер элемента enum равен размеру наибольшего варианта плюс идентификатор варианта.
Со структурой это немного отличается.Если мы игнорируем заполнение, размер структуры является суммой размеров ее членов.С отступом это будет немного больше:
fn main() {
let size = std::mem::size_of::<TheEnum>();
println!("Enum: {}", size * 8);
let size = std::mem::size_of::<TheStruct>();
println!("Struct: {}", size * 8);
}
struct TheStruct {
a: u64,
b: u8,
c: u64
}
enum TheEnum {
A(u64),
B(u8),
C(u64)
}
Здесь мы видим разницу:
Enum: 128;64 для наибольшего варианта и 64 для идентификатора варианта.
Структура: 192;выровнен по 64 битам, поэтому у нас есть 54 бита заполнения
Другое отличие заключается в том, как вы используете перечисления и структуры.В перечислении вы должны инициализировать только один из вариантов.В вашем случае - либо IPv4, либо IPv6.Со структурой, как в вашем примере, вы должны предоставить адреса V4 и v6.Вы не можете предоставить только V4 или только V6.