twnet generate rubyish bool getters

This commit is contained in:
ChillerDragon 2022-11-15 11:03:13 +01:00
parent 3a219f406b
commit 92b2cbe4a9
2 changed files with 45 additions and 7 deletions

View file

@ -12,6 +12,7 @@ declare -A FIELD_TYPES=(
[int]='int integer num number' [int]='int integer num number'
[string]='string str text' [string]='string str text'
[raw]='raw data bytes' [raw]='raw data bytes'
[bool]='bool boolean'
) )
function show_help() { function show_help() {
@ -27,24 +28,39 @@ function replace_line() {
local filename="$1" local filename="$1"
local search_ln="$2" local search_ln="$2"
local replace_str="$3" local replace_str="$3"
_edit_line_in_file replace "$filename" "$search_ln" "$replace_str" _edit_line_in_file replace 0 "$filename" "$search_ln" "$replace_str"
}
# replace 'num_lines' after match
function replace_lines_from() {
local filename="$1"
local search_ln="$2"
local replace_str="$3"
local num_lines="$4"
_edit_line_in_file replace "$num_lines" "$filename" "$search_ln" "$replace_str"
} }
function append_line() { function append_line() {
local filename="$1" local filename="$1"
local search_ln="$2" local search_ln="$2"
local replace_str="$3" local replace_str="$3"
_edit_line_in_file append "$filename" "$search_ln" "$replace_str" _edit_line_in_file append 0 "$filename" "$search_ln" "$replace_str"
} }
function _edit_line_in_file() { function _edit_line_in_file() {
local mode="$1" local mode="$1"
local filename="$2" local num_lines_from="$2"
local search_ln="$3" local filename="$3"
local replace_str="$4" local search_ln="$4"
local replace_str="$5"
local repl_ln local repl_ln
local from_ln local from_ln
local to_ln local to_ln
if [[ ! "$num_lines_from" =~ ^[0-9]+$ ]]
then
echo "Error: _edit_line_in_file num_lines_from '$num_lines_from' has to be numeric"
exit 1
fi
repl_ln="$(grep -nF "$search_ln" "$filename" | cut -d':' -f1)" repl_ln="$(grep -nF "$search_ln" "$filename" | cut -d':' -f1)"
if [ "$mode" == "append" ] if [ "$mode" == "append" ]
then then
@ -53,7 +69,7 @@ function _edit_line_in_file() {
elif [ "$mode" == "replace" ] elif [ "$mode" == "replace" ]
then then
from_ln="$((repl_ln-1))" from_ln="$((repl_ln-1))"
to_ln="$((repl_ln+1))" to_ln="$((repl_ln+1+num_lines_from))"
else else
echo "Error: _edit_line_in_file expectes mode replace or append" echo "Error: _edit_line_in_file expectes mode replace or append"
exit 1 exit 1
@ -346,6 +362,9 @@ function action_generate() {
elif [ "$field_type" == "int" ] elif [ "$field_type" == "int" ]
then then
hashs+="\n @$field_name = attr[:$field_name] || 0" hashs+="\n @$field_name = attr[:$field_name] || 0"
elif [ "$field_type" == "bool" ]
then
hashs+="\n @$field_name = attr[:$field_name] || false"
else # string or other else # string or other
hashs+="\n @$field_name = attr[:$field_name] || 'TODO: fill default'" hashs+="\n @$field_name = attr[:$field_name] || 'TODO: fill default'"
fi fi
@ -369,7 +388,7 @@ function action_generate() {
if [ "$field_type" == "raw" ] if [ "$field_type" == "raw" ]
then then
packs+="Packer.pack_raw(@$field_name) +\n" packs+="Packer.pack_raw(@$field_name) +\n"
elif [ "$field_type" == "int" ] elif [ "$field_type" == "int" ] || [ "$field_type" == "bool" ]
then then
packs+="Packer.pack_int(@$field_name) +\n" packs+="Packer.pack_int(@$field_name) +\n"
else # string or other else # string or other
@ -377,6 +396,21 @@ function action_generate() {
fi fi
done done
replace_line "$tmpfile" Packer.pack_int "${packs:2:-4}" replace_line "$tmpfile" Packer.pack_int "${packs:2:-4}"
local bools=''
for field_name in "${!fields[@]}"
do
field_type="${fields[$field_name]}"
[[ "$field_type" == "bool" ]] || continue
bools+=" def $field_name?\n"
bools+=" !@$field_name.zero?\n"
bools+=" end\n"
bools+="\n"
done
replace_lines_from "$tmpfile" 'def foo?' "${bools::-2}" 3
local destfile local destfile
destfile="lib/models/$(basename "$tmpfile")" destfile="lib/models/$(basename "$tmpfile")"
if [ -f "$destfile" ] if [ -f "$destfile" ]

View file

@ -29,6 +29,10 @@ class PacketName
{ foo: @foo, bar: @bar } { foo: @foo, bar: @bar }
end end
def foo?
!@foo.zero?
end
# basically to_network # basically to_network
# int array the SENDER sends to the RECEIVER # int array the SENDER sends to the RECEIVER
def to_a def to_a