Skip to content

mruby implementation of the newer TNetStrings specification with support for Hashes and Arrays

License

Notifications You must be signed in to change notification settings

Asmod4n/mruby-tnetstrings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mruby-tnetstrings

Installation

First get a working copy of mruby then add

  conf.gem mgem: 'mruby-tnetstrings'

to your build_conf.rb

Examples

Objects can be packed with Object#to_tnetstring or TNetStrings.dump:

packed_hash = { 'a': 'hash', 'with': [1, 'embedded', 'array'] }.to_tnetstring
packed_string = TNetStrings.dump('bye')

packed_hash   # => "45:1:a,4:hash,4:with,23:1:1#8:embedded,5:array,]}"
packed_string # => "3:bye,"

They are unpacked with TNetStrings.parse:

TNetStrings.parse(packed_hash)   # => [{"a"=>"hash", "with"=>[1, "embedded", "array"]}, ""]
TNetStrings.parse(packed_string) # => ["bye", ""]

A string with multiple packed values can be unpacked by checking if there is a non empty remainder TNetStrings.parse:

packed = packed_string + packed_hash

unpacked_string, extra = TNetStrings.parse(packed) # => ["bye", "45:1:a,4:hash,4:with,23:1:1#8:embedded,5:array,]}"]
if extra.bytesize != 0
  unpacked_hash, _ = TNetStrings.parse(extra) # => [{"a"=>"hash", "with"=>[1, "embedded", "array"]}, ""]
end

Overriding to_tnetstring

It's not supported to override to_tnetstring, TNetStrings.dump ignores it, same when that object is included in a Hash or Array. This gem treats objects like ruby does, if you want to change the way your custom Class gets handled you can add to_hash, to_ary, to_int or to_str methods so it will be packed like a Hash, Array, Integer or String (in that order) then.

About

mruby implementation of the newer TNetStrings specification with support for Hashes and Arrays

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages