anchor.diff:      end;
   ensure_safe_type(_) ->
       {error, bad_type}.
  +
  +ensure_safe_rtype(<<"TXT">>) -> ok;
  +ensure_safe_rtype(RType) ->
  +    {error, {bad_rtype, RType}}.
   
   parse_type_t(<<$_, Protocol/binary>>) ->
       parse_type_t(<<>>, Protocol).
  
positive.code: -export([browse/1, browse/2]).
  -export([resolve/3, resolve_sync/3, resolve_sync/4]).
  -export([register/2, register/3, register/4, register/6]).
  
  -ifdef(TEST).
  -include_lib("eunit/include/eunit.hrl").
  
negative.code: -type resolve_result() :: {resolve, {hostname(), ip_port(), txt_strings()}}.
  -type resolve_sync_result() :: {hostname(), ip_port(), txt_strings()}.
  -type register_result() :: {register, add | remove, {name(), type(), domain()}}.
  -type rtype() :: binary() | iolist().
  -type rclass() :: binary() | iolist().
  -type rdata() :: binary() | iolist().
  %% TODO: is name() the right type in query_result()?
  -type query_record_result() :: {query_record, add | remove, {domain(), rtype(), rclass(), rdata()}}.
  -type result() :: enumerate_result() | browse_result() | resolve_result() |
  		  register_result() | query_record_result().
  -type result_message() :: {dnssd, op_ref(), result()}.
  
  -export_type([domain_type/0, domain/0, name/0, type/0, hostname/0, ip_port/0,
  