forward declarations of the structs