require "./spec_helper" class Game include CBOR::Serializable abstract class Player include CBOR::Serializable @[CBOR::Field(key: "hp")] property health_points : Int32 = 100 @[CBOR::Field(key: "dp")] property defense_points : Int32 = 5 use_cbor_discriminator "type", { magician: Magician, warrior: Warrior } def initialize end end class Magician < Player property wand_level : Int32 = 1 def initialize @type = "magician" end end class Warrior < Player def initialize @defense_points = 20 @type = "warrior" end end property players : Array(Magician | Warrior) def initialize @players = [] of (Magician | Warrior) end end describe CBOR do describe "Complex object representations" do it "Game#to_cbor with use_cbor_discriminator" do game = Game.new magician = Game::Magician.new magician.wand_level = 5 game.players << magician game.players << Game::Warrior.new game.to_cbor.hexstring.should eq "a167706c617965727382a46268701864626470056a77616e645f6c6576656c056474797065686d6167696369616ea362687018646264701464747970656777617272696f72" end it "Game#from_cbor with use_cbor_discriminator" do game = Game.new magician = Game::Magician.new magician.wand_level = 5 game.players << magician game.players << Game::Warrior.new new_game = Game.from_cbor game.to_cbor new_game.to_cbor.hexstring.should eq "a167706c617965727382a46268701864626470056a77616e645f6c6576656c056474797065686d6167696369616ea362687018646264701464747970656777617272696f72" end end end