finished struct and constructor