towerops/test_encode_decode.exs
Graham McIntire efaf5558ff refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196)
Phase 1: Foundation Types (100% complete)
- query_helpers: SQL LIKE sanitization with pipe operators
- numeric: Integer parsing with pattern matching guards
- result: Pure Elixir Result monad (map, and_then, unwrap_or)

Phase 2: Ecto Domain Types (100% complete)
- ip_address: IPv4/IPv6 validation using :inet directly
- mac_address: Multi-format MAC parsing (colon/hyphen/dot/compact)
- snmp_oid: OID parsing/manipulation with recursive pattern matching

All 198 tests passing across converted modules.
API changed from Gleam-style {:some/:none to idiomatic {:ok/:error.
Refactored parse_numeric_oid to use with statement, reducing nesting depth.

Reviewed-on: graham/towerops-web#196
2026-03-28 09:52:07 -05:00

27 lines
761 B
Elixir

alias Towerops.Agent.SnmpResult
result = %SnmpResult{
device_id: "550e8400-e29b-41d4-a716-446655440000",
job_type: :POLL,
job_id: "test",
timestamp: 1_234_567_890,
oid_values: %{"1.2.3" => "test"}
}
IO.puts("Original: #{inspect(result)}")
binary = SnmpResult.encode(result)
IO.puts("Encoded to #{byte_size(binary)} bytes")
case SnmpResult.decode(binary) do
{:ok, decoded} ->
IO.puts("Decoded successfully!")
IO.puts(" device_id: #{decoded.device_id}")
IO.puts(" job_type: #{inspect(decoded.job_type)}")
IO.puts(" job_id: #{decoded.job_id}")
IO.puts(" timestamp: #{decoded.timestamp}")
IO.puts(" oid_values: #{inspect(decoded.oid_values)}")
{:error, reason} ->
IO.puts("Decode failed: #{inspect(reason)}")
end