diff options
| author | Florian Frank <flori@ping.de> | 2011-09-12 20:04:08 +0200 |
|---|---|---|
| committer | Florian Frank <flori@ping.de> | 2011-09-12 20:04:08 +0200 |
| commit | 05f22914aa8679e17588995eb334b4c4335c9265 (patch) | |
| tree | ced9a145c489f755c91b9220fd0191d31e54bf4f /lib/json/add/struct.rb | |
| parent | f0adb8f0c89192aea4bb36ff8c2414e247477fcf (diff) | |
| download | json-05f22914aa8679e17588995eb334b4c4335c9265.tar.gz | |
Split all implementations into single files
This way it's easier to create one's own serialisations by picking just
the desired ones and mixing them with one's own implementations.
Diffstat (limited to 'lib/json/add/struct.rb')
| -rw-r--r-- | lib/json/add/struct.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/json/add/struct.rb b/lib/json/add/struct.rb new file mode 100644 index 0000000..6847cde --- /dev/null +++ b/lib/json/add/struct.rb @@ -0,0 +1,30 @@ +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +# Struct serialization/deserialization +class Struct + + # Deserializes JSON string by constructing new Struct object with values + # <tt>v</tt> serialized by <tt>to_json</tt>. + def self.json_create(object) + new(*object['v']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + klass = self.class.name + klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!" + { + JSON.create_id => klass, + 'v' => values, + } + end + + # Stores class name (Struct) with Struct values <tt>v</tt> as a JSON string. + # Only named structs are supported. + def to_json(*args) + as_json.to_json(*args) + end +end |
