module BinData::SkipUntilValidPlugin

def read_and_return_value(io)

def read_and_return_value(io)
  prototype = get_parameter(:until_valid)
  validator = prototype.instantiate(nil, self)
  valid = false
  until valid
    begin
      io.with_readahead do
        validator.read(io)
        valid = true
      end
    rescue ValidityError
      io.readbytes(1)
    end
  end
end

def skip_length

def skip_length
  # no skipping when writing
  0
end