From 605a90e24c8e491e0cd92a6ce1fbd7c686faf6ff Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Thu, 29 Dec 2016 19:21:06 -0800 Subject: [PATCH 1/3] Use a case statement to serialize bool values This eliminates the private bool_to_int/1 function and lets us return constant binary result values directly. There is a nominal performance improvement, but nothing significant. --- lib/thrift/protocols/binary.ex | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/thrift/protocols/binary.ex b/lib/thrift/protocols/binary.ex index 39942db9..557996d1 100644 --- a/lib/thrift/protocols/binary.ex +++ b/lib/thrift/protocols/binary.ex @@ -36,10 +36,6 @@ defmodule Thrift.Protocols.Binary do def int_type({:set, _}), do: 14 def int_type({:list, _}), do: 15 - defp bool_to_int(false), do: 0 - defp bool_to_int(nil), do: 0 - defp bool_to_int(_), do: 1 - defp to_message_type(:call), do: 1 defp to_message_type(:reply), do: 2 defp to_message_type(:exception), do: 3 @@ -54,8 +50,11 @@ defmodule Thrift.Protocols.Binary do [] end def serialize(:bool, value) do - value = bool_to_int(value) - <> + case value do + nil -> <<0::8-signed>> + false -> <<0::8-signed>> + _ -> <<1::8-signed>> + end end def serialize(:i8, value) do <> From c6ed05c15a6030c5caa20f90449ea5effa443dae Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Thu, 29 Dec 2016 19:30:28 -0800 Subject: [PATCH 2/3] Match directly in serialize/2 function clause --- lib/thrift/protocols/binary.ex | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/thrift/protocols/binary.ex b/lib/thrift/protocols/binary.ex index 557996d1..eaee6f46 100644 --- a/lib/thrift/protocols/binary.ex +++ b/lib/thrift/protocols/binary.ex @@ -49,13 +49,9 @@ defmodule Thrift.Protocols.Binary do def serialize(_, nil) do [] end - def serialize(:bool, value) do - case value do - nil -> <<0::8-signed>> - false -> <<0::8-signed>> - _ -> <<1::8-signed>> - end - end + def serialize(:bool, nil), do: <<0::8-signed>> + def serialize(:bool, false), do: <<0::8-signed>> + def serialize(:bool, _), do: <<1::8-signed>> def serialize(:i8, value) do <> end From 4b0503a44a0d4826442e873accc39b3a763601c2 Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Fri, 30 Dec 2016 09:23:10 -0800 Subject: [PATCH 3/3] Strictly match just true and false for :bool --- lib/thrift/protocols/binary.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/thrift/protocols/binary.ex b/lib/thrift/protocols/binary.ex index eaee6f46..df6db6bf 100644 --- a/lib/thrift/protocols/binary.ex +++ b/lib/thrift/protocols/binary.ex @@ -49,9 +49,8 @@ defmodule Thrift.Protocols.Binary do def serialize(_, nil) do [] end - def serialize(:bool, nil), do: <<0::8-signed>> def serialize(:bool, false), do: <<0::8-signed>> - def serialize(:bool, _), do: <<1::8-signed>> + def serialize(:bool, true), do: <<1::8-signed>> def serialize(:i8, value) do <> end