Skip to content

Commit

Permalink
style: apply some quokka changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ahamez committed Feb 25, 2025
1 parent f0a3a6d commit 4ea550f
Show file tree
Hide file tree
Showing 20 changed files with 90 additions and 153 deletions.
11 changes: 6 additions & 5 deletions benchmark/mix/tasks/protox/benchmark/generate/payloads.ex
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do
@moduledoc false

require Logger

use Mix.Task
use PropCheck

alias ProtobufTestMessages.Proto3.TestAllTypesProto3

require Logger

@nb_samples 10

@impl Mix.Task
Expand All @@ -31,7 +33,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do
match?(["Protox", "Benchmark", _, "Message"], Module.split(mod))
end)

modules = [ProtobufTestMessages.Proto3.TestAllTypesProto3 | modules]
modules = [TestAllTypesProto3 | modules]

Logger.info("Modules: #{inspect(modules)}")

Expand All @@ -51,8 +53,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Generate.Payloads do
payloads =
payloads_async
|> Task.async_stream(fn {name, gen} -> {name, gen.()} end, timeout: :infinity)
|> Stream.map(fn {:ok, {name, payloads}} -> {name, payloads} end)
|> Map.new()
|> Map.new(fn {:ok, {name, payloads}} -> {name, payloads} end)

{:ok, payloads}
end
Expand Down
4 changes: 2 additions & 2 deletions benchmark/mix/tasks/protox/benchmark/generate/protos.ex
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
defmodule Mix.Tasks.Protox.Benchmark.Generate.Protos do
@moduledoc false

require Logger

use Mix.Task

require Logger

# Frequencies are taken from
# https://github.com/protocolbuffers/protobuf/blob/336d6f04e94efebcefb5574d0c8d487bcb0d187e/benchmarks/gen_synthetic_protos.py.
@field_freqs [
Expand Down
6 changes: 4 additions & 2 deletions benchmark/mix/tasks/protox/benchmark/report.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Report do

use Mix.Task

alias Benchee.Formatters.{Console, HTML}

@impl Mix.Task
@spec run(any) :: any
def run(args) do
Expand All @@ -11,8 +13,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Report do
Benchee.report(
load: files,
formatters: [
{Benchee.Formatters.Console, extended_statistics: true},
{Benchee.Formatters.HTML, file: "benchmark/output/html/report.html"}
{Console, extended_statistics: true},
{HTML, file: "benchmark/output/html/report.html"}
]
)
else
Expand Down
10 changes: 6 additions & 4 deletions benchmark/mix/tasks/protox/benchmark/run.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do

use Mix.Task

alias Benchee.Formatters.Console

@options [
task: :string
]
Expand All @@ -11,9 +13,9 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do
@spec run(any) :: any
def run(args) do
with {opts, argv, []} <- OptionParser.parse(args, strict: @options),
tasks <- get_tasks(opts),
{:ok, tag} <- get_tag(argv),
payloads <- get_payloads("./benchmark/benchmark_payloads.bin") do
tasks = get_tasks(opts),
{:ok, tag} <- get_tag(argv) do
payloads = get_payloads("./benchmark/benchmark_payloads.bin")
run_benchee_tasks(tag, payloads, tasks)
else
err ->
Expand Down Expand Up @@ -56,7 +58,7 @@ defmodule Mix.Tasks.Protox.Benchmark.Run do
time: 5,
memory_time: 2,
reduction_time: 2,
formatters: [Benchee.Formatters.Console]
formatters: [Console]
)
end

Expand Down
3 changes: 1 addition & 2 deletions conformance/mix/tasks/protox/task.ex
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,7 @@ defmodule Mix.Tasks.Protox.Conformance do
{"protobuf_BUILD_LIBPROTOC", "OFF"},
{"protobuf_BUILD_LIBUPB", "OFF"}
]
|> Enum.map(fn {key, value} -> "-D#{key}=#{value}" end)
|> Enum.join(" ")
|> Enum.map_join(" ", fn {key, value} -> "-D#{key}=#{value}" end)

File.cd!(Mix.Project.deps_paths().protobuf, fn ->
cmd = shell.cmd("cmake . #{configuration}")
Expand Down
9 changes: 2 additions & 7 deletions conformance/protox/conformance/escript.ex
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,8 @@ defmodule Protox.Conformance.Escript do
end

defp handle_request(
{
:ok,
request = %Conformance.ConformanceRequest{
requested_output_format: :PROTOBUF,
payload: {:protobuf_payload, _}
}
},
{:ok,
%Conformance.ConformanceRequest{requested_output_format: :PROTOBUF, payload: {:protobuf_payload, _}} = request},
log_file
) do
IO.binwrite(log_file, "Will parse protobuf\n")
Expand Down
4 changes: 2 additions & 2 deletions lib/mix/tasks/protox/generate.ex
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
defmodule Mix.Tasks.Protox.Generate do
@shortdoc "Generate Elixir code from Protobuf definitions"

@moduledoc """
Generate Elixir code from `.proto` files.
Expand All @@ -13,8 +15,6 @@ defmodule Mix.Tasks.Protox.Generate do
If you have large protobuf files, you can use the `--multiple-files` option to generate
one file per module (it will leverage parallel compilation).
"""
@shortdoc "Generate Elixir code from Protobuf definitions"

use Mix.Task

@options [
Expand Down
19 changes: 8 additions & 11 deletions lib/protox/decode.ex
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
defmodule Protox.Decode do
@moduledoc false
# Helpers decoding functions that will be used by the generated code.

import Bitwise

use Protox.{
Float,
WireTypes
}

import Bitwise

alias Protox.{
Varint,
Zigzag
Expand Down Expand Up @@ -269,14 +268,12 @@ defmodule Protox.Decode do
end

def parse_delimited(bytes, len) do
try do
<<value::binary-size(len), rest::binary>> = bytes
<<value::binary-size(len), rest::binary>> = bytes

{value, rest}
rescue
_ ->
reraise Protox.DecodingError.new(bytes, "invalid bytes for delimited field"),
__STACKTRACE__
end
{value, rest}
rescue
_ ->
reraise Protox.DecodingError.new(bytes, "invalid bytes for delimited field"),
__STACKTRACE__
end
end
26 changes: 7 additions & 19 deletions lib/protox/define_decoder.ex
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
defmodule Protox.DefineDecoder do
@moduledoc false
# Internal. Generates the decoder of a message.
use Protox.{Float, WireTypes}

alias Protox.{Field, OneOf, Scalar}
use Protox.{Float, WireTypes}

def define(msg_name, fields, opts \\ []) do
vars = %{
Expand Down Expand Up @@ -39,12 +39,10 @@ defmodule Protox.DefineDecoder do
quote do
@spec decode(binary()) :: {:ok, t()} | {:error, any()}
def decode(bytes) do
try do
{:ok, decode!(bytes)}
rescue
e in [Protox.DecodingError, Protox.IllegalTagError, Protox.RequiredFieldsError] ->
{:error, e}
end
{:ok, decode!(bytes)}
rescue
e in [Protox.DecodingError, Protox.IllegalTagError, Protox.RequiredFieldsError] ->
{:error, e}
end

unquote(decode_bang_fun)
Expand Down Expand Up @@ -267,12 +265,7 @@ defmodule Protox.DefineDecoder do
end
end

defp make_update_field(
value,
%Field{kind: %OneOf{}, type: {:message, _}} = field,
vars,
_wrap_value
) do
defp make_update_field(value, %Field{kind: %OneOf{}, type: {:message, _}} = field, vars, _wrap_value) do
case field.label do
:proto3_optional ->
quote do
Expand Down Expand Up @@ -305,12 +298,7 @@ defmodule Protox.DefineDecoder do
end
end

defp make_update_field(
value,
%Field{kind: %Scalar{}, type: {:message, _}} = field,
vars,
_wrap_value
) do
defp make_update_field(value, %Field{kind: %Scalar{}, type: {:message, _}} = field, vars, _wrap_value) do
quote do
{
unquote(field.name),
Expand Down
40 changes: 13 additions & 27 deletions lib/protox/define_encoder.ex
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,10 @@ defmodule Protox.DefineEncoder do
quote do
@spec encode(t()) :: {:ok, iodata(), non_neg_integer()} | {:error, any()}
def encode(msg) do
try do
msg |> encode!() |> Tuple.insert_at(0, :ok)
rescue
e in [Protox.EncodingError, Protox.RequiredFieldsError] ->
{:error, e}
end
msg |> encode!() |> Tuple.insert_at(0, :ok)
rescue
e in [Protox.EncodingError, Protox.RequiredFieldsError] ->
{:error, e}
end

@spec encode!(t()) :: {iodata(), non_neg_integer()} | no_return()
Expand Down Expand Up @@ -124,13 +122,11 @@ defmodule Protox.DefineEncoder do

quote do
defp unquote(fun_name)({unquote(vars.acc), unquote(vars.acc_size)}, unquote(vars.msg)) do
try do
unquote(fun_ast)
rescue
ArgumentError ->
reraise Protox.EncodingError.new(unquote(name), "invalid field value"),
__STACKTRACE__
end
unquote(fun_ast)
rescue
ArgumentError ->
reraise Protox.EncodingError.new(unquote(name), "invalid field value"),
__STACKTRACE__
end
end
end
Expand All @@ -152,15 +148,15 @@ defmodule Protox.DefineEncoder do
end

case {syntax, required} do
{:proto2, _required = true} ->
{:proto2, true = _required} ->
quote do
case unquote(vars.msg).unquote(field.name) do
nil -> raise Protox.RequiredFieldsError.new([unquote(field.name)])
_ -> unquote(encode_value_clause)
end
end

{:proto2, _required = false} ->
{:proto2, false = _required} ->
quote do
case unquote(var) do
nil -> {unquote(vars.acc), unquote(vars.acc_size)}
Expand All @@ -180,12 +176,7 @@ defmodule Protox.DefineEncoder do
end
end

defp make_encode_field_body(
%Field{label: :proto3_optional, kind: %OneOf{}} = field,
_required,
_syntax,
vars
) do
defp make_encode_field_body(%Field{label: :proto3_optional, kind: %OneOf{}} = field, _required, _syntax, vars) do
{key, key_size} = Protox.Encode.make_key_bytes(field.tag, field.type)
var = Macro.var(:child_field_value, __MODULE__)
encode_value_ast = get_encode_value_body(field.type, var)
Expand All @@ -206,12 +197,7 @@ defmodule Protox.DefineEncoder do
end
end

defp make_encode_field_body(
%Field{kind: %OneOf{}} = field,
_required,
_syntax,
vars
) do
defp make_encode_field_body(%Field{kind: %OneOf{}} = field, _required, _syntax, vars) do
{key, key_size} = Protox.Encode.make_key_bytes(field.tag, field.type)
encode_value_ast = get_encode_value_body(field.type, vars.child_field_value)

Expand Down
12 changes: 6 additions & 6 deletions lib/protox/define_message.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule Protox.DefineMessage do
alias Protox.{Field, OneOf, Scalar}

def define(messages_schemas, opts \\ []) do
for {_msg_name, msg_schema = %Protox.MessageSchema{}} <- messages_schemas do
for {_msg_name, %Protox.MessageSchema{} = msg_schema} <- messages_schemas do
# Revert the order of the fields so we iterate from last field to first.
# This enables us to construct the output iodata using [ field | acc ]
sorted_fields = msg_schema.fields |> Map.values() |> Enum.sort(&(&1.tag >= &2.tag))
Expand Down Expand Up @@ -56,7 +56,7 @@ defmodule Protox.DefineMessage do
def unknown_fields(msg), do: msg.unquote(unknown_fields)

@spec unknown_fields_name() :: unquote(unknown_fields)
def unknown_fields_name(), do: unquote(unknown_fields)
def unknown_fields_name, do: unquote(unknown_fields)

@spec clear_unknown_fields(struct) :: struct
def clear_unknown_fields(msg), do: struct!(msg, [{unquote(unknown_fields), []}])
Expand Down Expand Up @@ -98,7 +98,7 @@ defmodule Protox.DefineMessage do
# Append a '_' while there's a collision
base_name
|> Atom.to_string()
|> (fn x -> x <> "_" end).()
|> then(fn x -> x <> "_" end)
|> String.to_atom()
|> make_unknown_fields_name(fields)
else
Expand Down Expand Up @@ -128,7 +128,7 @@ defmodule Protox.DefineMessage do
Protox.Defs.split_oneofs(fields)

fields_types =
for field = %Field{} <- fields do
for %Field{} = field <- fields do
case {field.kind, field.type} do
{:map, type} ->
key_type = type |> elem(0) |> proto_type_to_typespec()
Expand All @@ -143,7 +143,7 @@ defmodule Protox.DefineMessage do
value_type = proto_type_to_typespec(type)
quote(do: {unquote(field.name), unquote(value_type) | nil})

{%Scalar{}, type = {:message, _}} ->
{%Scalar{}, {:message, _} = type} ->
value_type = proto_type_to_typespec(type)
quote(do: {unquote(field.name), unquote(value_type) | nil})

Expand All @@ -167,7 +167,7 @@ defmodule Protox.DefineMessage do
end

proto3_optionals_types =
for field = %Field{} <- proto3_optionals do
for %Field{} = field <- proto3_optionals do
quote do
{unquote(field.name), unquote(proto_type_to_typespec(field.type)) | nil}
end
Expand Down
6 changes: 3 additions & 3 deletions lib/protox/encode.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ defmodule Protox.Encode do
This module contains the functions necessary to encode protobuf messages.
"""

import Protox.Guards
import Bitwise

use Protox.{
Float,
WireTypes
}

import Bitwise
import Protox.Guards

alias Protox.{
Varint,
Zigzag
Expand Down
Loading

0 comments on commit 4ea550f

Please sign in to comment.