docs: def parse(self, buffer, inlineparent = None):
          '''
          Try to parse the struct from bytes sequence. The bytes sequence is taken from a streaming source.
          
          :param buffer: bytes sequence to be parsed from.
          
          :param inlineparent: if specified, this struct is embedded in another struct.
          
          :returns: None if the buffer does not have enough data for this struct (e.g. incomplete read
                  from socket); (struct, size) else, where struct is the parsed result (usually a NamedStruct object)
                  and size is the used bytes length, so you can start another parse from buffer[size:].
          '''
          if self.base is not None:
              return self.base.parse(buffer, inlineparent)
          r = self._parse(buffer, inlineparent)
          if r is None:
              return None
          (s, size) = r
          self.subclass(s)
          return (s, (size + self.padding - 1) // self.padding * self.padding)