<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def link(self):
 """Link all the types in this module and all included modules."""

        if self.linked:
            return self

        self.linked = True

        included_modules = []

        # Link includes
        for include in self.includes.values():
            included_modules.append(include.link().surface)

        self.scope.add_surface('__includes__', tuple(included_modules))
        self.scope.add_surface('__thrift_source__', self.thrift_source)

        # Link self
        for linker in LINKERS:
            linker(self.scope).link()

        self.scope.add_surface('loads', Deserializer(self.protocol))
        self.scope.add_surface('dumps', Serializer(self.protocol))

        return self