use multiversx_sc_codec as codec;
use multiversx_sc_codec_derive::*;
use codec::test_util::{check_top_decode, check_top_encode, check_top_encode_decode};
#[derive(TopEncodeOrDefault, TopDecodeOrDefault, PartialEq, Eq, Clone, Debug)]
enum TrickyDefaultDayOfWeek {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
impl codec::EncodeDefault for TrickyDefaultDayOfWeek {
fn is_default(&self) -> bool {
matches!(self, TrickyDefaultDayOfWeek::Friday)
}
}
impl codec::DecodeDefault for TrickyDefaultDayOfWeek {
fn default() -> Self {
TrickyDefaultDayOfWeek::Friday
}
}
#[test]
fn fieldless_tricky_defaults() {
check_top_encode_decode(TrickyDefaultDayOfWeek::Friday, &[]);
assert_eq!(check_top_encode(&TrickyDefaultDayOfWeek::Monday), &[]);
assert_eq!(TrickyDefaultDayOfWeek::Monday, check_top_decode(&[0]));
assert_eq!(TrickyDefaultDayOfWeek::Monday, check_top_decode(&[0; 13]));
check_top_encode_decode(TrickyDefaultDayOfWeek::Tuesday, &[1]);
check_top_encode_decode(TrickyDefaultDayOfWeek::Wednesday, &[2]);
check_top_encode_decode(TrickyDefaultDayOfWeek::Thursday, &[3]);
check_top_encode_decode(TrickyDefaultDayOfWeek::Saturday, &[5]);
check_top_encode_decode(TrickyDefaultDayOfWeek::Sunday, &[6]);
}