blob: 532fd75eb5927382ebf2972b6c6d6db605449b13 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
use io;
use endian;
export type op_circle = struct {
pos: pos,
radius: u8,
color: u32
};
export type op_other = void;
export type op = (op_circle| op_other);
def SER_LEN: size = 13;
// return value must be freed... for now. ehh
export fn ser_op(op: op) []u8 = {
const opc = op as op_circle;
let buf: []u8 = alloc([0...],SER_LEN);
endian::leputu32(buf[0..4], opc.pos.0: u32);
endian::leputu32(buf[4..8], opc.pos.1: u32);
endian::leputu32(buf[8..12], opc.color: u32);
buf[12] = opc.radius;
return buf;
};
export fn deser_op(bytes: []u8) op = {
assert(len(bytes) == SER_LEN, "wrong length somehow");
return op_circle {
pos = (endian::legetu32(bytes[0..4]): i32,
endian::legetu32(bytes[4..8]): i32),
color = endian::legetu32(bytes[8..12]),
radius = bytes[12],
};
};
|