restruct impl