use deriveJSON instead of Generic instance