Estoy escribiendo código para decodificar mensajes desde un protocolo binario. A cada tipo de mensaje se le asigna un identificador de tipo de 1 byte y cada mensaje lleva este tipo de identificación. Todos los mensajes comienzan con un encabezado común que consta de 5 campos. Mi API es simple:Cadenas de bits que coinciden con el patrón de Erlang
decoder:decode(Bin :: binary()) -> my_message_type() | {error, binary()}`
Mi primer instinto es apoyarse en gran medida de coincidencia de patrones escribiendo función de uno de decodificación para cada tipo de mensaje y para descifrar que tipo de mensaje completo en el argumento divertido
decode(<<Hdr1:8, ?MESSAGE_TYPE_ID_X:8, Hdr3:8, Hdr4:8, Hdr5:32,
TypeXField1:32, TypeXFld2:32, TypeXFld3:32>>) ->
#message_x{hdr1=Hdr1, hdr3=Hdr3 ... fld4=TypeXFld3};
decode(<<Hdr1:8, ?MESSAGE_TYPE_ID_Y:8, Hdr3:8, Hdr4:8, Hdr5:32,
TypeYField1:32, TypeYFld2:16, TypeYFld3:4, TypeYFld4:32
TypeYFld5:64>>) ->
#message_y{hdr1=Hdr1, hdr3=Hdr3 ... fld5=TypeYFld5}.
Nota que si bien los primeros 5 campos de los mensajes son estructuralmente idénticos, los campos posteriores varían según el tipo de mensaje.
Tengo aproximadamente 20 tipos de mensajes y por lo tanto 20 funciones similares a las de arriba. ¿Estoy decodificando el mensaje completo varias veces con esta estructura? ¿Es idiomático? ¿Sería mejor que simplemente decodificara el campo de tipo de mensaje en el encabezado de la función y luego decodificara el mensaje completo en el cuerpo del mensaje?
Meta pregunta: obtengo un bonito coloreado del código erlang en la vista previa cuando edito esta publicación, pero no en la página representada después de publicar. ¿Ayuda? – mpm
se dio cuenta de esto también cuando se publica el código de erlang, podría ser una pregunta para meta –
Publicó una pregunta sobre meta con respecto a la coloración de sintaxis http://meta.stackexchange.com/questions/89117/why-do-i-get-nice-erlang -syntax-coloring-in-preiviev-but-not-in-the-rendered-page –