Current section
Files
Jump to
Current section
Files
lib/compilation_tests/test_spec.ex
defmodule TestSpec do
@moduledoc false
# ============================================================================
defmodule P do
@moduledoc false
use Etiquette.Spec
packet "p" do
field "x", 4
field "y", 4, id: :y
field "z", (..), length_by: :y
end
packet "x" do
field "x", 1
end
end
# ============================================================================
defmodule Pack do
@moduledoc false
use Etiquette.Spec
packet "Pack", id: :pack do
field "Type", 2
field "Data Length", 2, id: :length
field "Data", (..), length_by: :length
end
end
# ============================================================================
defmodule Example.Spec do
@moduledoc false
use Etiquette.Spec
packet "Header Packet", id: :header_packet do
field "Header Fixed", 1, fixed: 1, doc: "Whether the packet is a header."
field "Packet Type", 2, doc: "The type of the payload. Can be any 0-3 integer."
field "Type-Specific fields", (..), id: :type_specific_fields, doc: "The packet payload."
end
packet "Hello Packet", of: :header_packet do
field "Packet Type", 2, fixed: 0b00
field "Hello-specific payload", 8, part_of: :type_specific_fields
end
packet "Conversation Packet", of: :header_packet do
field "Packet Type", 2, fixed: 0b01
field "Conversation-specific payload", 8, part_of: :type_specific_fields
end
packet "Bye Packet", of: :header_packet do
field "Packet Type", 2, fixed: 0b11
field "Bye-specific payload", 8, part_of: :type_specific_fields
end
def compile_test do
is_header_packet?(<<>>)
is_hello_packet?(<<>>)
is_conversation_packet?(<<>>)
is_bye_packet?(<<>>)
parse_header_packet(<<>>)
parse_hello_packet(<<>>)
parse_conversation_packet(<<>>)
parse_bye_packet(<<>>)
build_header_packet(nil, nil)
build_hello_packet(nil)
build_conversation_packet(nil)
build_bye_packet(nil)
end
end
# ============================================================================
defmodule Spec do
@moduledoc false
use Etiquette.Spec
packet "Header", id: :header do
field "Type", 2
field "Data", (..)
end
packet "Type 0", id: :type_0, of: :header do
field "Type", 2, fixed: 0b00
field "Data", (..)
end
packet "Type 1", id: :type_1, of: :header do
field "Type", 2, fixed: 0b01
field "Data", (..)
end
end
end