module BinData::BasePrimitive::AssertedValuePlugin

def _value

def _value
  reading? ? @value : eval_parameter(:asserted_value)
end

def assert!

def assert!
  assert_value(snapshot)
end

def assert_value(current_value)

def assert_value(current_value)
  expected = eval_parameter(:asserted_value, value: current_value)
  if current_value != expected
    raise ValidityError,
          "value is '#{current_value}' but " \
          "expected '#{expected}' for #{debug_name}"
  end
end

def asserted_binary_s

This feature is used by Skip.
value read in, rather than the +:asserted_value+.
Rationale: while reading, +#to_binary_s+ will use the

The asserted value as a binary string.
def asserted_binary_s
  value_to_binary_string(eval_parameter(:asserted_value))
end

def assign(val)

def assign(val)
  assert_value(val)
  super(val)
end

def do_read(io) # :nodoc:

:nodoc:
def do_read(io) # :nodoc:
  super(io)
  assert!
end