docs: def decode(self, bytes, raw=False, index=None):
          """Decodes the given bytes according to this Field Definition.
  
          If raw is True, no enumeration substitutions will be applied
          to the data returned.
  
          If index is an integer or slice (and the type of this
          FieldDefinition is an ArrayType), then only the element(s) at
          the specified position(s) will be decoded.
          """
          if index is not None and isinstance(self.type, dtype.ArrayType):
              value = self.type.decode( bytes[self.slice()], index, raw )
          else:
              value = self.type.decode( bytes[self.slice()], raw )
  
  
          # Apply bit mask if needed
          if self.mask is not None:
              value &= self.mask
  
          if self.shift > 0:
              value >>= self.shift
  
          if not raw and self.enum is not None:
              value = self.enum.get(value, value)
  
          return value