Skip to content

Commit 71b3fc7

Browse files
committed
refactor: Internal helper #_primary_type
1 parent 931e02e commit 71b3fc7

File tree

9 files changed

+58
-112
lines changed

9 files changed

+58
-112
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class BinaryParser
2+
# :nodoc:
3+
macro _primary_type(name, suffix)
4+
# Internal helper for define primary type like `UInt32`
5+
#
6+
# ## Argument:
7+
# - name: field name
8+
# - suffix: suffix for declare, like `u32`
9+
10+
_primary_type({{name}}, {{suffix}}, {{suffix.starts_with?("u") ? "UInt#{suffix[1..-1].id}" : "Int#{suffix[1..-1].id}"}})
11+
end
12+
13+
# :nodoc:
14+
macro _primary_type(name, suffix, type)
15+
# ## Argument:
16+
# - name: field name
17+
# - suffix: suffix for declare, like `u32`
18+
# - type: like `UInt32`
19+
property! :{{name.id}}
20+
@{{name.id}} = 0{{suffix.id}}
21+
22+
def _read_{{name.id}}(io : IO)
23+
@{{name.id}} = io.not_nil!.read_bytes({{type.id}}).as({{type.id}})
24+
end
25+
26+
def _write_{{name.id}}(io : IO)
27+
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
28+
end
29+
30+
def _size_static_{{name.id}}
31+
sizeof({{type.id}})
32+
end
33+
end
34+
end

src/binary_parser/macros/int16.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
#
35
# Declare a int16 field
@@ -6,19 +8,6 @@ class BinaryParser
68
# int16 :value # name of field
79
# ```
810
macro int16(name)
9-
property! :{{name.id}}
10-
@{{name.id}} = 0i16
11-
12-
def _read_{{name.id}}(io : IO)
13-
@{{name.id}} = io.not_nil!.read_bytes(Int16).as(Int16)
14-
end
15-
16-
def _write_{{name.id}}(io : IO)
17-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
18-
end
19-
20-
def _size_static_{{name.id}}
21-
sizeof(Int16)
22-
end
11+
_primary_type({{name}}, "i16")
2312
end
2413
end

src/binary_parser/macros/int32.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a int32 field
35
#
46
# ```crystal
57
# int32 :value # name of field
68
# ```
79
macro int32(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0i32
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(Int32).as(Int32)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(Int32)
21-
end
10+
_primary_type({{name}}, "i32")
2211
end
2312
end

src/binary_parser/macros/int64.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a int64 field
35
#
46
# ```crystal
57
# int64 :value # name of field
68
# ```
79
macro int64(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0i64
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(Int64).as(Int64)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(Int64)
21-
end
10+
_primary_type({{name}}, "i64")
2211
end
2312
end

src/binary_parser/macros/int8.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a int8 field
35
#
46
# ```crystal
57
# int8 :value # name of field
68
# ```
79
macro int8(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0i8
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(Int8).as(Int8)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(Int8)
21-
end
10+
_primary_type({{name}}, "i8")
2211
end
2312
end

src/binary_parser/macros/uint16.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a uint16 field
35
#
46
# ```crystal
57
# uint16 :value # name of field
68
# ```
79
macro uint16(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0u16
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(UInt16).as(UInt16)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(UInt16)
21-
end
10+
_primary_type({{name}}, "u16")
2211
end
2312
end

src/binary_parser/macros/uint32.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a uint32 field
35
#
46
# ```crystal
57
# uint32 :value # name of field
68
# ```
79
macro uint32(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0u32
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(UInt32).as(UInt32)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(UInt32)
21-
end
10+
_primary_type({{name}}, "u32")
2211
end
2312
end

src/binary_parser/macros/uint64.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a uint64 field
35
#
46
# ```crystal
57
# uint64 :value # name of field
68
# ```
79
macro uint64(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0u64
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(UInt64).as(UInt64)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(UInt64)
21-
end
10+
_primary_type({{name}}, "u64")
2211
end
2312
end

src/binary_parser/macros/uint8.cr

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1+
require "./_primary_type"
2+
13
class BinaryParser
24
# Declare a uint8 field
35
#
46
# ```crystal
57
# uint8 :value # name of field
68
# ```
79
macro uint8(name)
8-
property! :{{name.id}}
9-
@{{name.id}} = 0u8
10-
11-
def _read_{{name.id}}(io : IO)
12-
@{{name.id}} = io.not_nil!.read_bytes(UInt8).as(UInt8)
13-
end
14-
15-
def _write_{{name.id}}(io : IO)
16-
io.not_nil!.write_bytes(@{{name.id}}.not_nil!)
17-
end
18-
19-
def _size_static_{{name.id}}
20-
sizeof(UInt8)
21-
end
10+
_primary_type({{name}}, "u8")
2211
end
2312
end

0 commit comments

Comments
 (0)