We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
App breaking when using Enum as field for Generic
<!-- Provide a general summary of the bug in the title above. -->
When using an Enum as a field on a Generic, the app breaks, throwing a `NotImplementedError`.

<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->

## Describe the Bug
The below code is an example of the error.
```python
from enum import Enum
from typing import Generic, Optional, TypeVar

import strawberry

T = TypeVar("T")


@strawberry.enum
class EstimatedValueEnum(Enum):
    test = "test"
    testtest = "testtest"


@strawberry.type
class EstimatedValue(Generic[T]):
    value: T
    type: EstimatedValueEnum


@strawberry.type
class Query:
    id_translations: Optional[EstimatedValue[int]]


schema = strawberry.Schema(query=Query)
```
Are we doing something wrong and this is intended or is this a bug?
<!-- A clear and concise description of what the bug is. -->

## System Information

 - Operating system: Docker
 - Strawberry version (if applicable): Since [0.149.2](https://github.com/strawberry-graphql/strawberry/blob/main/CHANGELOG.md#01492---2022-12-09)

<!-- Add any other relevant information about the problem here. -->


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `strawberry/enum.py`
Content:
```
1 import dataclasses
2 from enum import EnumMeta
3 from typing import (
4     Any,
5     Callable,
6     Iterable,
7     List,
8     Mapping,
9     Optional,
10     TypeVar,
11     Union,
12     overload,
13 )
14 
15 from strawberry.type import StrawberryType
16 
17 from .exceptions import ObjectIsNotAnEnumError
18 
19 
20 @dataclasses.dataclass
21 class EnumValue:
22     name: str
23     value: Any
24     deprecation_reason: Optional[str] = None
25     directives: Iterable[object] = ()
26     description: Optional[str] = None
27 
28 
29 @dataclasses.dataclass
30 class EnumDefinition(StrawberryType):
31     wrapped_cls: EnumMeta
32     name: str
33     values: List[EnumValue]
34     description: Optional[str]
35     directives: Iterable[object] = ()
36 
37     def __hash__(self) -> int:
38         # TODO: Is this enough for unique-ness?
39         return hash(self.name)
40 
41     def copy_with(
42         self, type_var_map: Mapping[TypeVar, Union[StrawberryType, type]]
43     ) -> Union[StrawberryType, type]:
44         return super().copy_with(type_var_map)  # type: ignore[safe-super]
45 
46     @property
47     def is_generic(self) -> bool:
48         return False
49 
50 
51 # TODO: remove duplication of EnumValueDefinition and EnumValue
52 @dataclasses.dataclass
53 class EnumValueDefinition:
54     value: Any
55     deprecation_reason: Optional[str] = None
56     directives: Iterable[object] = ()
57     description: Optional[str] = None
58 
59 
60 def enum_value(
61     value: Any,
62     deprecation_reason: Optional[str] = None,
63     directives: Iterable[object] = (),
64     description: Optional[str] = None,
65 ) -> EnumValueDefinition:
66     return EnumValueDefinition(
67         value=value,
68         deprecation_reason=deprecation_reason,
69         directives=directives,
70         description=description,
71     )
72 
73 
74 EnumType = TypeVar("EnumType", bound=EnumMeta)
75 
76 
77 def _process_enum(
78     cls: EnumType,
79     name: Optional[str] = None,
80     description: Optional[str] = None,
81     directives: Iterable[object] = (),
82 ) -> EnumType:
83     if not isinstance(cls, EnumMeta):
84         raise ObjectIsNotAnEnumError(cls)
85 
86     if not name:
87         name = cls.__name__
88 
89     description = description
90 
91     values = []
92     for item in cls:  # type: ignore
93         item_value = item.value
94         item_name = item.name
95         deprecation_reason = None
96         item_directives: Iterable[object] = ()
97         enum_value_description = None
98 
99         if isinstance(item_value, EnumValueDefinition):
100             item_directives = item_value.directives
101             enum_value_description = item_value.description
102             deprecation_reason = item_value.deprecation_reason
103             item_value = item_value.value
104 
105             # update _value2member_map_ so that doing `MyEnum.MY_VALUE` and
106             # `MyEnum['MY_VALUE']` both work
107             cls._value2member_map_[item_value] = item
108             cls._member_map_[item_name]._value_ = item_value
109 
110         value = EnumValue(
111             item_name,
112             item_value,
113             deprecation_reason=deprecation_reason,
114             directives=item_directives,
115             description=enum_value_description,
116         )
117         values.append(value)
118 
119     cls._enum_definition = EnumDefinition(  # type: ignore
120         wrapped_cls=cls,
121         name=name,
122         values=values,
123         description=description,
124         directives=directives,
125     )
126 
127     return cls
128 
129 
130 @overload
131 def enum(
132     _cls: EnumType,
133     *,
134     name: Optional[str] = None,
135     description: Optional[str] = None,
136     directives: Iterable[object] = ()
137 ) -> EnumType:
138     ...
139 
140 
141 @overload
142 def enum(
143     _cls: None = None,
144     *,
145     name: Optional[str] = None,
146     description: Optional[str] = None,
147     directives: Iterable[object] = ()
148 ) -> Callable[[EnumType], EnumType]:
149     ...
150 
151 
152 def enum(
153     _cls: Optional[EnumType] = None,
154     *,
155     name: Optional[str] = None,
156     description: Optional[str] = None,
157     directives: Iterable[object] = ()
158 ) -> Union[EnumType, Callable[[EnumType], EnumType]]:
159     """Registers the enum in the GraphQL type system.
160 
161     If name is passed, the name of the GraphQL type will be
162     the value passed of name instead of the Enum class name.
163     """
164 
165     def wrap(cls: EnumType) -> EnumType:
166         return _process_enum(cls, name, description, directives=directives)
167 
168     if not _cls:
169         return wrap
170 
171     return wrap(_cls)
172
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/strawberry/enum.py b/strawberry/enum.py
--- a/strawberry/enum.py
+++ b/strawberry/enum.py
@@ -41,7 +41,8 @@
     def copy_with(
         self, type_var_map: Mapping[TypeVar, Union[StrawberryType, type]]
     ) -> Union[StrawberryType, type]:
-        return super().copy_with(type_var_map)  # type: ignore[safe-super]
+        # enum don't support type parameters, so we can safely return self
+        return self
 
     @property
     def is_generic(self) -> bool:

{"golden_diff": "diff --git a/strawberry/enum.py b/strawberry/enum.py\n--- a/strawberry/enum.py\n+++ b/strawberry/enum.py\n@@ -41,7 +41,8 @@\n     def copy_with(\n         self, type_var_map: Mapping[TypeVar, Union[StrawberryType, type]]\n     ) -> Union[StrawberryType, type]:\n-        return super().copy_with(type_var_map)  # type: ignore[safe-super]\n+        # enum don't support type parameters, so we can safely return self\n+        return self\n \n     @property\n     def is_generic(self) -> bool:\n", "issue": "App breaking when using Enum as field for Generic\n<!-- Provide a general summary of the bug in the title above. -->\r\nWhen using an Enum as a field on a Generic, the app breaks, throwing a `NotImplementedError`.\r\n\r\n<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->\r\n<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->\r\n\r\n## Describe the Bug\r\nThe below code is an example of the error.\r\n```python\r\nfrom enum import Enum\r\nfrom typing import Generic, Optional, TypeVar\r\n\r\nimport strawberry\r\n\r\nT = TypeVar(\"T\")\r\n\r\n\r\n@strawberry.enum\r\nclass EstimatedValueEnum(Enum):\r\n    test = \"test\"\r\n    testtest = \"testtest\"\r\n\r\n\r\n@strawberry.type\r\nclass EstimatedValue(Generic[T]):\r\n    value: T\r\n    type: EstimatedValueEnum\r\n\r\n\r\n@strawberry.type\r\nclass Query:\r\n    id_translations: Optional[EstimatedValue[int]]\r\n\r\n\r\nschema = strawberry.Schema(query=Query)\r\n```\r\nAre we doing something wrong and this is intended or is this a bug?\r\n<!-- A clear and concise description of what the bug is. -->\r\n\r\n## System Information\r\n\r\n - Operating system: Docker\r\n - Strawberry version (if applicable): Since [0.149.2](https://github.com/strawberry-graphql/strawberry/blob/main/CHANGELOG.md#01492---2022-12-09)\r\n\r\n<!-- Add any other relevant information about the problem here. -->\r\n\n", "before_files": [{"content": "import dataclasses\nfrom enum import EnumMeta\nfrom typing import (\n    Any,\n    Callable,\n    Iterable,\n    List,\n    Mapping,\n    Optional,\n    TypeVar,\n    Union,\n    overload,\n)\n\nfrom strawberry.type import StrawberryType\n\nfrom .exceptions import ObjectIsNotAnEnumError\n\n\n@dataclasses.dataclass\nclass EnumValue:\n    name: str\n    value: Any\n    deprecation_reason: Optional[str] = None\n    directives: Iterable[object] = ()\n    description: Optional[str] = None\n\n\n@dataclasses.dataclass\nclass EnumDefinition(StrawberryType):\n    wrapped_cls: EnumMeta\n    name: str\n    values: List[EnumValue]\n    description: Optional[str]\n    directives: Iterable[object] = ()\n\n    def __hash__(self) -> int:\n        # TODO: Is this enough for unique-ness?\n        return hash(self.name)\n\n    def copy_with(\n        self, type_var_map: Mapping[TypeVar, Union[StrawberryType, type]]\n    ) -> Union[StrawberryType, type]:\n        return super().copy_with(type_var_map)  # type: ignore[safe-super]\n\n    @property\n    def is_generic(self) -> bool:\n        return False\n\n\n# TODO: remove duplication of EnumValueDefinition and EnumValue\n@dataclasses.dataclass\nclass EnumValueDefinition:\n    value: Any\n    deprecation_reason: Optional[str] = None\n    directives: Iterable[object] = ()\n    description: Optional[str] = None\n\n\ndef enum_value(\n    value: Any,\n    deprecation_reason: Optional[str] = None,\n    directives: Iterable[object] = (),\n    description: Optional[str] = None,\n) -> EnumValueDefinition:\n    return EnumValueDefinition(\n        value=value,\n        deprecation_reason=deprecation_reason,\n        directives=directives,\n        description=description,\n    )\n\n\nEnumType = TypeVar(\"EnumType\", bound=EnumMeta)\n\n\ndef _process_enum(\n    cls: EnumType,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = (),\n) -> EnumType:\n    if not isinstance(cls, EnumMeta):\n        raise ObjectIsNotAnEnumError(cls)\n\n    if not name:\n        name = cls.__name__\n\n    description = description\n\n    values = []\n    for item in cls:  # type: ignore\n        item_value = item.value\n        item_name = item.name\n        deprecation_reason = None\n        item_directives: Iterable[object] = ()\n        enum_value_description = None\n\n        if isinstance(item_value, EnumValueDefinition):\n            item_directives = item_value.directives\n            enum_value_description = item_value.description\n            deprecation_reason = item_value.deprecation_reason\n            item_value = item_value.value\n\n            # update _value2member_map_ so that doing `MyEnum.MY_VALUE` and\n            # `MyEnum['MY_VALUE']` both work\n            cls._value2member_map_[item_value] = item\n            cls._member_map_[item_name]._value_ = item_value\n\n        value = EnumValue(\n            item_name,\n            item_value,\n            deprecation_reason=deprecation_reason,\n            directives=item_directives,\n            description=enum_value_description,\n        )\n        values.append(value)\n\n    cls._enum_definition = EnumDefinition(  # type: ignore\n        wrapped_cls=cls,\n        name=name,\n        values=values,\n        description=description,\n        directives=directives,\n    )\n\n    return cls\n\n\n@overload\ndef enum(\n    _cls: EnumType,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> EnumType:\n    ...\n\n\n@overload\ndef enum(\n    _cls: None = None,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> Callable[[EnumType], EnumType]:\n    ...\n\n\ndef enum(\n    _cls: Optional[EnumType] = None,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> Union[EnumType, Callable[[EnumType], EnumType]]:\n    \"\"\"Registers the enum in the GraphQL type system.\n\n    If name is passed, the name of the GraphQL type will be\n    the value passed of name instead of the Enum class name.\n    \"\"\"\n\n    def wrap(cls: EnumType) -> EnumType:\n        return _process_enum(cls, name, description, directives=directives)\n\n    if not _cls:\n        return wrap\n\n    return wrap(_cls)\n", "path": "strawberry/enum.py"}], "after_files": [{"content": "import dataclasses\nfrom enum import EnumMeta\nfrom typing import (\n    Any,\n    Callable,\n    Iterable,\n    List,\n    Mapping,\n    Optional,\n    TypeVar,\n    Union,\n    overload,\n)\n\nfrom strawberry.type import StrawberryType\n\nfrom .exceptions import ObjectIsNotAnEnumError\n\n\n@dataclasses.dataclass\nclass EnumValue:\n    name: str\n    value: Any\n    deprecation_reason: Optional[str] = None\n    directives: Iterable[object] = ()\n    description: Optional[str] = None\n\n\n@dataclasses.dataclass\nclass EnumDefinition(StrawberryType):\n    wrapped_cls: EnumMeta\n    name: str\n    values: List[EnumValue]\n    description: Optional[str]\n    directives: Iterable[object] = ()\n\n    def __hash__(self) -> int:\n        # TODO: Is this enough for unique-ness?\n        return hash(self.name)\n\n    def copy_with(\n        self, type_var_map: Mapping[TypeVar, Union[StrawberryType, type]]\n    ) -> Union[StrawberryType, type]:\n        # enum don't support type parameters, so we can safely return self\n        return self\n\n    @property\n    def is_generic(self) -> bool:\n        return False\n\n\n# TODO: remove duplication of EnumValueDefinition and EnumValue\n@dataclasses.dataclass\nclass EnumValueDefinition:\n    value: Any\n    deprecation_reason: Optional[str] = None\n    directives: Iterable[object] = ()\n    description: Optional[str] = None\n\n\ndef enum_value(\n    value: Any,\n    deprecation_reason: Optional[str] = None,\n    directives: Iterable[object] = (),\n    description: Optional[str] = None,\n) -> EnumValueDefinition:\n    return EnumValueDefinition(\n        value=value,\n        deprecation_reason=deprecation_reason,\n        directives=directives,\n        description=description,\n    )\n\n\nEnumType = TypeVar(\"EnumType\", bound=EnumMeta)\n\n\ndef _process_enum(\n    cls: EnumType,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = (),\n) -> EnumType:\n    if not isinstance(cls, EnumMeta):\n        raise ObjectIsNotAnEnumError(cls)\n\n    if not name:\n        name = cls.__name__\n\n    description = description\n\n    values = []\n    for item in cls:  # type: ignore\n        item_value = item.value\n        item_name = item.name\n        deprecation_reason = None\n        item_directives: Iterable[object] = ()\n        enum_value_description = None\n\n        if isinstance(item_value, EnumValueDefinition):\n            item_directives = item_value.directives\n            enum_value_description = item_value.description\n            deprecation_reason = item_value.deprecation_reason\n            item_value = item_value.value\n\n            # update _value2member_map_ so that doing `MyEnum.MY_VALUE` and\n            # `MyEnum['MY_VALUE']` both work\n            cls._value2member_map_[item_value] = item\n            cls._member_map_[item_name]._value_ = item_value\n\n        value = EnumValue(\n            item_name,\n            item_value,\n            deprecation_reason=deprecation_reason,\n            directives=item_directives,\n            description=enum_value_description,\n        )\n        values.append(value)\n\n    cls._enum_definition = EnumDefinition(  # type: ignore\n        wrapped_cls=cls,\n        name=name,\n        values=values,\n        description=description,\n        directives=directives,\n    )\n\n    return cls\n\n\n@overload\ndef enum(\n    _cls: EnumType,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> EnumType:\n    ...\n\n\n@overload\ndef enum(\n    _cls: None = None,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> Callable[[EnumType], EnumType]:\n    ...\n\n\ndef enum(\n    _cls: Optional[EnumType] = None,\n    *,\n    name: Optional[str] = None,\n    description: Optional[str] = None,\n    directives: Iterable[object] = ()\n) -> Union[EnumType, Callable[[EnumType], EnumType]]:\n    \"\"\"Registers the enum in the GraphQL type system.\n\n    If name is passed, the name of the GraphQL type will be\n    the value passed of name instead of the Enum class name.\n    \"\"\"\n\n    def wrap(cls: EnumType) -> EnumType:\n        return _process_enum(cls, name, description, directives=directives)\n\n    if not _cls:\n        return wrap\n\n    return wrap(_cls)\n", "path": "strawberry/enum.py"}]}