Files
herolib/lib/data/paramsparser/params_resp.v
2025-10-12 12:30:19 +03:00

54 lines
1.4 KiB
V

module paramsparser
import incubaid.herolib.data.resp
// TODO: fix this. encoding some params and redecoding them does not work.
// encode using resp (redis procotol)
pub fn (mut p Params) to_resp() ![]u8 {
mut b_main := resp.builder_new()
mut b_param := resp.builder_new()
for param in p.params {
b_param.add(resp.r_list_string([param.key, param.value]))
}
mut b_arg := resp.builder_new()
for arg in p.args {
b_arg.add(resp.r_string(arg))
}
b_main.add(resp.r_list_bytestring([b_param.data, b_arg.data]))
return b_main.data
}
pub fn from_resp(data []u8) !Params {
mut p := Params{}
mut top_array_ := resp.decode(data)![0]
top_array := top_array_ as resp.RArray
params_string := top_array.values[0] as resp.RBString
params_array := resp.decode(params_string.value)!
for param_string_ in params_array {
param_string := param_string_ as resp.RArray
key_rstring := param_string.values[0] as resp.RString
value_rstring := param_string.values[1] as resp.RString
p.params << Param{
key: key_rstring.value
value: value_rstring.value
}
}
args_string := top_array.values[1] as resp.RBString
args_array := resp.decode(args_string.value)!
for arg_string_ in args_array {
arg_string := arg_string_ as resp.RString
p.args << arg_string.value
}
return p
}
// NEXT: needs to do a good test, this protocol is much smaller than default text format