https://modiranahan.com/blog/retaining-structure-types