blob: ecfff4fb48f1586718416569a8c23ed8e421c915 (
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
from lib.utils import get_dir_location
import os
# utilities specifically for codegen
def burger_type_to_rust_type(burger_type):
is_var = False
uses = set()
if burger_type == 'byte':
field_type_rs = 'i8'
elif burger_type == 'short':
field_type_rs = 'i16'
elif burger_type == 'int':
field_type_rs = 'i32'
elif burger_type == 'long':
field_type_rs = 'i64'
elif burger_type == 'float':
field_type_rs = 'f32'
elif burger_type == 'double':
field_type_rs = 'f64'
elif burger_type == 'varint':
is_var = True
field_type_rs = 'i32'
elif burger_type == 'varlong':
is_var = True
field_type_rs = 'i64'
elif burger_type == 'boolean':
field_type_rs = 'bool'
elif burger_type == 'string':
field_type_rs = 'String'
elif burger_type == 'chatcomponent':
field_type_rs = 'Component'
uses.add('azalea_chat::component::Component')
elif burger_type == 'identifier':
field_type_rs = 'ResourceLocation'
uses.add('azalea_core::resource_location::ResourceLocation')
elif burger_type == 'uuid':
field_type_rs = 'Uuid'
uses.add('uuid::Uuid')
elif burger_type == 'position':
field_type_rs = 'BlockPos'
uses.add('azalea_core::BlockPos')
elif burger_type == 'nbtcompound':
field_type_rs = 'azalea_nbt::Tag'
elif burger_type == 'itemstack':
field_type_rs = 'Slot'
uses.add('azalea_core::Slot')
elif burger_type == 'metadata':
field_type_rs = 'EntityMetadata'
uses.add('crate::mc_buf::EntityMetadata')
elif burger_type == 'enum':
# enums are too complicated, leave those to the user
field_type_rs = 'todo!()'
elif burger_type.endswith('[]'):
field_type_rs, is_var, uses = burger_type_to_rust_type(
burger_type[:-2])
field_type_rs = f'Vec<{field_type_rs}>'
else:
print('Unknown field type:', burger_type)
exit()
return field_type_rs, is_var, uses
def write_packet_file(state, packet_name_snake_case, code):
with open(get_dir_location(f'../azalea-protocol/src/packets/{state}/{packet_name_snake_case}.rs'), 'w') as f:
f.write(code)
def fmt():
os.system(f'cd {get_dir_location("..")} && cargo fmt')
|