File tree Expand file tree Collapse file tree 9 files changed +58
-112
lines changed Expand file tree Collapse file tree 9 files changed +58
-112
lines changed Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 i16
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
2413end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 i32
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 i64
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 i8
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 u16
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 u32
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 u64
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
2312end
Original file line number Diff line number Diff line change 1+ require " ./_primary_type"
2+
13class 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}} = 0 u8
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
2312end
You can’t perform that action at this time.
0 commit comments