anchor.diff:      Code :: piqirun_code(),
       X :: boolean()) -> iolist().
   
  --spec gen_bool/2 :: (
  +-spec gen_bool_field/2 :: (
       Code :: piqirun_code(),
       X :: boolean()) -> iolist().
   
  
positive.code: 
  string_of_block(X) -> binary_of_block(X).
  
  
negative.code: 
  -type decode_fun() :: fun( (piqirun_buffer()) -> any() ).
  
  -type packed_decode_fun() :: fun( (binary()) -> {any(), binary()} ).
  
  -spec parse_required_field/3 :: (
      Code :: pos_integer(),
      ParseValue :: decode_fun(),
      L :: [parsed_field()] ) -> { Res :: any(), Rest :: [parsed_field()] }.
  
  -spec parse_optional_field/3 :: (
      Code :: pos_integer(),
      ParseValue :: decode_fun(),
      L :: [parsed_field()] ) -> { Res :: 'undefined' | any(), Rest :: [parsed_field()] }.
  
  -spec parse_optional_field/4 :: (
      Code :: pos_integer(),
      ParseValue :: decode_fun(),
      L :: [parsed_field()],
      Default :: binary() ) -> { Res :: any(), Rest :: [parsed_field()] }.
  
  -spec parse_repeated_field/3 :: (
      Code :: pos_integer(),
      ParseValue :: decode_fun(),
      L :: [parsed_field()] ) -> { Res :: [any()], Rest :: [parsed_field()] }.
  
  -spec parse_packed_repeated_field/3 :: (
      Code :: pos_integer(),
      ParseValue :: packed_decode_fun(),
      L :: [parsed_field()] ) -> { Res :: [any()], Rest :: [parsed_field()] }.
  
  -spec parse_flag/2 :: (
      Code :: pos_integer(),
      L :: [parsed_field()] ) -> { Res :: boolean(), Rest :: [parsed_field()] }.
  
  
  parse_required_field(Code, ParseValue, L) ->
      case parse_optional_field(Code, ParseValue, L) of
          {'undefined', _Rest} -> throw_error({'missing_field', Code});
          X -> X
      end.
  
  
  parse_optional_field(Code, ParseValue, L, Default) ->
      case parse_optional_field(Code, ParseValue, L) of
          {'undefined', Rest} ->
              Res = ParseValue(Default),
              {Res, Rest};
  