code: def _define_structure_view(data_type):
      
      def define_getter(field_index, field_type, field_view):
          if field_view is None:
              def getter(self):
                  return self._data[field_index]
          elif isinstance(field_type, _ATOMIC):
              def getter(self):
                  return field_view(self._data, field_index)
          else:
              def getter(self):
                  return field_view(self._data[field_index])
  
          return getter
  
      def define_setter(field_index, read_only):
          def setter(self, value):
              self._data[field_index] = value
  
          return None if read_only else setter
  
      field_views = [_resolve_view(field.type) for field in data_type.fields]
      mixins = (_StructuredViewMixin,)
      attributes = _get_mixin_attributes(mixins)
      attributes.update({
          '_fields': tuple(field.name for field in data_type.fields),
      })
      attributes.update({
          field.name: property(
              fget=define_getter(i, field.type, field_view),
              fset=define_setter(i, field.read_only),
              fdel=None)
          for i, (field, field_view)
          in enumerate(zip(data_type.fields, field_views))})
      name = data_type.name if data_type.name else 'StructureView'
      return type(name, (), attributes)
docs: Define a new view object for a `Structure` type.