Expiration represents a point in time when some event happens.
It can compare with a BlockInfo and will return is_expired() == true
once the condition is hit (and for every block in the future)
Adjusted from https://users.rust-lang.org/t/solved-derive-and-proc-macro-add-field-to-an-existing-struct/52307/3
Adds all fields required to instantiate an ADO to a struct.